{"id":26833409,"url":"https://github.com/mr-won/swing_jframejpanel","last_synced_at":"2025-03-30T15:28:55.073Z","repository":{"id":138423032,"uuid":"456401747","full_name":"mr-won/Swing_JFrameJPanel","owner":"mr-won","description":"Java의 Swing을 사용해서 JFrame, JPanel 만들어보기","archived":false,"fork":false,"pushed_at":"2022-02-09T07:40:39.000Z","size":76,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-18T02:27:15.199Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mr-won.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2022-02-07T07:31:29.000Z","updated_at":"2022-02-07T08:17:25.000Z","dependencies_parsed_at":"2023-08-20T14:07:13.796Z","dependency_job_id":null,"html_url":"https://github.com/mr-won/Swing_JFrameJPanel","commit_stats":null,"previous_names":["wonttan/swing_jframejpanel","wonchihyeon/swing_jframejpanel","chihyunwon/swing_jframejpanel","mr-won/swing_jframejpanel","chihyeonwon/swing_jframejpanel"],"tags_count":null,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mr-won%2FSwing_JFrameJPanel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mr-won%2FSwing_JFrameJPanel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mr-won%2FSwing_JFrameJPanel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mr-won%2FSwing_JFrameJPanel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mr-won","download_url":"https://codeload.github.com/mr-won/Swing_JFrameJPanel/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246337882,"owners_count":20761285,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-03-30T15:28:54.498Z","updated_at":"2025-03-30T15:28:55.054Z","avatar_url":"https://github.com/mr-won.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Java Swing\n\n## 프로젝트와 클래스 생성\n\nLesson이라는 프로젝트와 Frame이라는 클래스를 하나 생성해줍니다.\n\nFrame.java\n```Java\npublic class Frame {\n\tpublic static void main(String[] args) {\n\t}\n}\n```\n\n## 창 생성 (JFrame)\n\nJFrame 클래스의 기능을 사용하기 위해 new 생성자로 호출한 후 변수에 저장합니다.\n```Java\nimport javax.swing.JFrame;\n\npublic class Frame {\n\tpublic static void main(String[] args) {\n\t\tJFrame frame = new JFrame();\n\t}\n}\n```\n   \nJFrame 클래스의 setVisible 메서드를 사용해서 창을 화면에 표시합니다.\n```Java\nimport javax.swing.JFrame;\n\npublic class Frame {\n\tpublic static void main(String[] args) {\n\t\tJFrame frame = new JFrame();\n    \n\t\tframe.setVisible(true); // 창을 보이게 해줌\n\t}\n}\n```\n\n## 창의 기본적인 옵션 설정\n\n### 먼저 창의 크기를 변경하는 메서드인 setPreferredSize와 setSize를 사용합니다.\n```Java\nimport java.awt.Dimension;\n\nimport javax.swing.JFrame;\n\npublic class Frame {\n\tpublic static void main(String[] args) {\n\t\tJFrame frame = new JFrame();\n\t\t\n\t\tframe.setVisible(true); // 창을 보이게 해줌\n\t\tframe.setPreferredSize(new Dimension(840, 840/12*9));\n\t\tframe.setSize(840, 840/12*9); //프로그램 기본사이즈 설정\n\t}\n}\n```\n\nsetPreferredSize안에 가로,세로의 형식으로 넣을 수 있도록 Dimension 클래스를 새로운 생성자로 호출해서 사이즈를 설정합니다.   \n   \nsetSize 메서드로 자세한 크기를 가로,세로 형식으로 설정합니다.\n\n### 창의 위치를 설정하는 메서드인 setLocationRelativeTo와 창의 위치,사이즈 변경을 금지하는 setResizable를 사용합니다.\n\n```Java\nimport java.awt.Dimension;\n\nimport javax.swing.JFrame;\n\npublic class Frame {\n\tpublic static void main(String[] args) {\n\t\tJFrame frame = new JFrame();\n\t\t\n\t\tframe.setResizable(false); // 프로그램 사이즈 변경 금지\n\t\tframe.setVisible(true); // 창을 보이게 해줌\n\t\tframe.setPreferredSize(new Dimension(840, 840/12*9));\n\t\tframe.setSize(840, 840/12*9); //프로그램 기본사이즈 설정\n\t\tframe.setLocationRelativeTo(null); // 프로그램 기본 위치 해제\n\t}\n}\n```\n\n### 창을 껐을 때 프로그램이 완전히 종료되도록 하기 위해서 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)을 설정해줍니다.\n\n## 패널 생성\n\n패널 클래스를 사용하기 위해 패널을 새로운 생성자로 호출한 뒤 panel 변수에 저장합니다.\n\n```Java\nimport java.awt.Dimension;\n\nimport javax.swing.JFrame;\nimport javax.swing.JPanel;\n\npublic class Frame {\n\tpublic static void main(String[] args) {\n\t\tJFrame frame = new JFrame();\n\t\tJPanel panel = new JPanel();\n\t\t\n\t\tframe.add(panel); // 프레임에 패널을 넣어줌\n\t\t\n\t\t\n\t\t\n\t\tframe.setResizable(false); // 프로그램 사이즈 변경 금지\n\t\tframe.setVisible(true); // 창을 보이게 해줌\n\t\tframe.setPreferredSize(new Dimension(840, 840/12*9));\n\t\tframe.setSize(840, 840/12*9); //프로그램 기본사이즈 설정\n\t\tframe.setLocationRelativeTo(null); // 프로그램 기본 위치 해제\n\t\tframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 프로그램을 껐을 때 종료 되도록 설정\n\t}\n}\n```\n\n### 패널이 생성된 프레임 위에 나타나도록 frame.add에 생성한 패널을 넣어줍니다.\n\n```Java\nframe.add(panel); // 프레임에 패널을 넣어줌\n```\n\n## JLabel 레이블 생성과 배치\n\n레이블은 텍스트를 입력한는 공간입니다. 레이블을 생성하는 코드는 다음과 같습니다.\n```Java\nJLabel label = new JLabel(\"Some Text\");\n```\n코드를 입력하고 ctrl + shift + O를 눌러 모듈을 import 해줍니다.\n\n## Widget의 배치\n\nWidget을 배치할때는 panel.setLayout(new BorderLayout());을 사용합니다.\n```Java\npanel.setLayout(new BorderLayout());\n```\n\n방금 만든 레이블을 이 레이아웃을 사용해 동서남북으로 지정해줄 수 있습니다.\n```Java\npanel.add(label, BorderLayout.NORTH);\n```\n라벨을 북쪽(위쪽)으로 배치하였습니다.\n\n## 버튼 생성과 배치\n\n버튼을 생성할 때는 라벨과 같은 방법으로 생성합니다.\n```Java\nJButton btn1 = new JButton(\"Click me\");\n```\n\n배치 또한 라벨과 동일합니다.\n```Java\npanel.add(btn1, BorderLayout.WEST);\n```\nWEST 값을주어 (서쪽)왼쪽에 위치하도록 배치하였습니다.\n\n## TextArea와 TextField\n\n텍스트에이리어(TextArea)는 많은 글자를 입력하는 공간을 생성하고   \n   \n텍스트필드(TextField)는 안에 숫자를 넣어 글자를 넣을 공간을 지정할 수 있습니다.\n\n만드는 방법은 다음과 같습니다.\n```Java\nJTextArea textArea = new TextArea();\nJTextField textField = new TextField(200); //글자 수를 200으로 제한\n```\n\n배치 또한 라벨과 버튼과 같이 배치합니다.\n```Java\npanel.add(textArea, BorderLayout.CENTER)\n```\n텍스트에이리어를 가운데 배치했습니다.\n\n## 버튼패널 생성하고 그 안에 버튼들을 넣기\n\n버튼들이 들어있는 패널 하나를 생성하고 기존에 만든 버튼을 넣어보겠습니다.\n```Java\nJButton btn1 = new JButton();\nJPanel btnPanel = new JPanel();\n\nbtnPanel.add(btn1);\npanel.add(btnPanel, BorderLayout.WEST);\n```\n## 새로운 버튼을 생성하고 버튼패널에 넣기\n\n프로그램을 종료하는 기능을 하는 버튼을 새로 만들고 버튼패널에 넣어보겠습니다.\n```Java\nJButton btn2 = new JButton(\"Exit\");\n\nbtnPanel.add(btn2);\n```\n\n## 버튼에 각종 기능 넣기\n\n버튼에 기능을 넣는 방법으로는 addActionListener를 사용하는 방법이 있습니다.\n```Java\nbtn1.addActionListener(new ActionListener(){\n\tpublic void actionPerformed(ActionEvent e) {\n\t\ttextArea.append(\"You are amazing\");\n\t}\n});\n```\n먼저 btn1에 클릭했을 때 textArea에 You are amazing 글자가 추가되도록 기능을 추가했습니다.\n   \n마찬가지로 btn2에는 클릭했을 때 프로그램이 종료되도록하는 기능을 추가했습니다.\n```Java\nbtn2.addActionListener(new ActionListener(){\n\tpublic void actionPerformed(ActionEvent e) {\n\t\tSystem.exit(0);\n\t}\n});\n```\n\nbtn1을 클릭했을 때 textArea의 쓴 글자를 받아서 label 추가되록 기능을 추가해보겠습니다.\n```Java\nbtn1.addActionListener(new ActionListener(){\n\tpublic void actionPerformed(ActionEvent e) {\n\t\tlabel.setText(textArea.getText());\n\t}\n});\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmr-won%2Fswing_jframejpanel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmr-won%2Fswing_jframejpanel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmr-won%2Fswing_jframejpanel/lists"}