1) GUI 기초
다음과 같은 프로그램의 화면만 작성하여 보자. 적절한 배치 관리자를
선택하여 사용한다. 아직 이벤트 처리를 학습하지 않았으므로 기능을
제공할 필요는 없지만 기능을 제공해도 좋다.
package ex09.example; import ex09.MyFrame10; import javax.swing.*; import java.awt.*; public class example01 extends JFrame { public example01() { setSize(400, 150); setTitle("My Frame"); JLabel label = new JLabel("자바는 재미있나요?"); setLayout(new FlowLayout()); JButton button1 = new JButton("Yes"); JButton button2 = new JButton("No"); add(label); add(button1); add(button2); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { example01 f = new example01(); } }
기능 추가
2) GUI 기초
다음과 같은 프로그램의 화면만 만들어보자. 적절한 배치 관리자를
선택하여 사용한다. 아직 이벤트 처리를 학습하지 않았으므로 기능을
제공할 필요는 없지만 기능을 제공해도 좋다.
package ex09.example; import javax.swing.*; import java.awt.*; public class example02 extends JFrame { public example02() { setTitle("My Frame"); setSize(400, 150); setLayout(new FlowLayout()); JLabel jLabel = new JLabel("카운터 값"); JTextField jTextField = new JTextField(8); JButton jButton = new JButton("증가"); add(jLabel); add(jTextField); add(jButton); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { example02 f = new example02(); } }
기능 추가
3) GUI 기초
다음과 같은 프로그램의 화면만 만들어보자. 적절한 배치 관리자를
선택하여 사용한다. 패널을 추가로 사용하여도 좋다.
package ex09.example; import javax.swing.*; import java.awt.*; public class example03 extends JFrame { public example03() { setSize(350, 150); setTitle("My Frame"); setLayout(new FlowLayout()); JLabel jLabel = new JLabel("자바 호텔에 오신 것을 환영합니다. 숙박일수를 입력하세요."); JButton btn1 = new JButton("1일"); JButton btn2 = new JButton("2일"); JButton btn3 = new JButton("3일"); JButton btn4 = new JButton("4일"); JButton btn5 = new JButton("5일"); add(jLabel); add(btn1); add(btn2); add(btn3); add(btn4); add(btn5); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { example03 f = new example03(); } }
4) GUI 기초
다음과 같은 프로그램의 화면만 만들어보자.
배경색이 다른 패널을 이용한다.
이클립스의 “windowBuilder”를 이용하여도 좋다.
package ex09.example; import javax.swing.*; import java.awt.*; public class example04 extends JFrame { public example04() { setSize(320, 150); setTitle("JLabel Test"); setLayout(new FlowLayout()); setLayout(new FlowLayout(FlowLayout.LEFT, 25, 10)); // FlowLayout 생성자 수정 JLabel label1 = new JLabel(" Red"); JLabel label2 = new JLabel(" Yellow"); JLabel label3 = new JLabel(" Green"); JLabel label4 = new JLabel(" Blue"); JPanel jPanel1 = new JPanel(); jPanel1.setPreferredSize(new Dimension(40, 40)); jPanel1.setBackground(Color.red); JPanel jPanel2 = new JPanel(); jPanel2.setPreferredSize(new Dimension(40, 40)); jPanel2.setBackground(Color.yellow); JPanel jPanel3 = new JPanel(); jPanel3.setPreferredSize(new Dimension(40, 40)); jPanel3.setBackground(Color.green); JPanel jPanel4 = new JPanel(); jPanel4.setPreferredSize(new Dimension(40, 40)); jPanel4.setBackground(Color.blue); add(label1); add(label2); add(label3); add(label4); add(jPanel1); add(jPanel2); add(jPanel3); add(jPanel4); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { example04 f = new example04(); } }
5) GUI 기초
체중과 키를 받아서 BMI를 계산하는 다음과 같은 화면을 만들어보자.
이클립스의 “windowBuilder”를 이용하여도 좋다.
package ex09.example; import javax.swing.*; import java.awt.*; public class example05 extends JFrame { public example05() { setSize(350, 200); setLayout(new FlowLayout()); setLayout(new FlowLayout(FlowLayout.LEFT, 30, 10)); // GridLayout 생성자 수정 JLabel jLabel1 = new JLabel("나의 BMI 지수는 얼마나 될까? "); JLabel jLabel2 = new JLabel("나의 체중(kg):"); JLabel jLabel3 = new JLabel("나의 키(m): "); JTextField jTextField1 = new JTextField(10); JTextField jTextField2 = new JTextField(10); JButton jButton = new JButton("BMI 확인하기"); add(jLabel1); add(jLabel2); add(jTextField1); add(jLabel3); add(jTextField2); add(jButton); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { example05 f = new example05(); } }
6) GUI 기초
회원의 정보를 받아서 데이터베이스에 저장하는 프로그램의 화면을
만들어보자. 이클립스의 “windowBuilder”를 이용하여도 좋다.
package ex09.example; import javax.swing.*; import java.awt.*; public class Example06 extends JFrame { public Example06() { setSize(350, 260); setLayout(new GridBagLayout()); GridBagConstraints gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 0; gbc.gridwidth = 3; gbc.insets = new Insets(5, 5, 5, 5); JLabel j1 = new JLabel("회원 등록하기"); j1.setLocation(100, 10); j1.setFont(new Font("Dotum", Font.PLAIN, 20)); JLabel j2 = new JLabel("이름 "); JLabel j3 = new JLabel("패스워드 "); JLabel j4 = new JLabel("이메일 주소 "); JLabel j5 = new JLabel("전화번호 "); JTextField f1 = new JTextField(10); JTextField f2 = new JTextField(10); JTextField f3 = new JTextField(10); JTextField f4 = new JTextField(10); JButton b1 = new JButton("등록하기"); JButton b2 = new JButton("취소"); b1.setPreferredSize(new Dimension(100, 25)); b2.setPreferredSize(new Dimension(100, 25)); add(j1, gbc); gbc.gridy = 1; gbc.gridwidth = 1; gbc.anchor = GridBagConstraints.EAST; add(j2, gbc); gbc.gridx = 1; gbc.anchor = GridBagConstraints.WEST; add(f1, gbc); gbc.gridy = 2; gbc.gridx = 0; gbc.anchor = GridBagConstraints.EAST; add(j3, gbc); gbc.gridx = 1; gbc.anchor = GridBagConstraints.WEST; add(f2, gbc); gbc.gridy = 3; gbc.gridx = 0; gbc.anchor = GridBagConstraints.EAST; add(j4, gbc); gbc.gridx = 1; gbc.anchor = GridBagConstraints.WEST; add(f3, gbc); gbc.gridy = 4; gbc.gridx = 0; gbc.anchor = GridBagConstraints.EAST; add(j5, gbc); gbc.gridx = 1; gbc.anchor = GridBagConstraints.WEST; add(f4, gbc); gbc.gridy = 5; gbc.gridx = 0; gbc.gridwidth = 2; gbc.anchor = GridBagConstraints.CENTER; // 버튼을 중앙 정렬 // 간격을 작게 조절 gbc.insets = new Insets(2, -100, 2, 2); add(b1, gbc); gbc.gridx = 2; add(b2, gbc); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { Example06 f = new Example06(); } }
맑은 고딕 (Malgun Gothic):
Windows 운영 체제에 기본으로 포함되어 있는 한글 폰트입니다.
돋움 (Dotum):
Windows 운영 체제에 기본으로 포함되어 있는 폰트 중 하나입니다.
나눔 폰트 (Nanum Font):
나눔고딕, 나눔명조 등 다양한 스타일의 한글 폰트를 제공하는 나눔 폰트는 Linux 및 Windows에서도 사용 가능합니다.
한글 고딕 (Hanna):
한글 폰트로서 깔끔한 디자인을 가지고 있습니다.
7) 배치 관리자
프레임 안에 20개의 버튼을 다음과 같이 배치하는 프로그램을
작성하라. GridLayout을 사용한다.
버튼의 배경색은 랜덤한 색상으로 한다.
import javax.swing.*; import java.awt.*; import java.util.HashSet; import java.util.Set; public class Example07 extends JFrame { private JPanel panel; private JTextField tField; private JButton[] buttons; String[] labels = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19" }; public Example07() { tField = new JTextField(20); panel = new JPanel(); tField.setEnabled(false); setTitle("My Frame"); panel.setLayout(new GridLayout(0, 5, 0, 0)); buttons = new JButton[20]; int index = 0; // Use a Set to keep track of used colors Set<Color> usedColors = new HashSet<>(); for (int row = 0; row < 5; row++) { for (int cols = 0; cols < 5; cols++) { if (index < labels.length) { buttons[index] = new JButton(labels[index]); // Generate a unique color Color color; do { int R = (int) (Math.random() * 256); int G = (int) (Math.random() * 256); int B = (int) (Math.random() * 256); color = new Color(R, G, B); } while (usedColors.contains(color)); usedColors.add(color); buttons[index].setForeground(Color.BLACK); buttons[index].setBackground(color); panel.add(buttons[index]); index++; } } } setLayout(new BorderLayout()); add(tField, BorderLayout.NORTH); add(panel, BorderLayout.CENTER); tField.setBorder(BorderFactory.createEmptyBorder()); pack(); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { Example07 f = new Example07(); } }
8) 배치 관리자
다음과 같은 간단한 전화번호 입력기의 화면을 만들어보자.
여러 개의 패널과 배치 관리자를 혼용하여 완성해본다.
package ex09.example; import javax.swing.*; import java.awt.*; public class Example08 extends JFrame { private JPanel panel; private JTextField tField; private JButton[] buttons; private String[] labels = { "1", "2", "3", "4", "5", "5", "7", "8", "9", "*", "0", "#", "send", "", "end" }; public Example08() { tField = new JTextField(35); panel = new JPanel(); tField.setText(""); tField.setEnabled(false); panel.setLayout(new GridLayout(0, 3, 0, 0)); buttons = new JButton[15]; int index = 0; for (int row = 0; row < 3; row++) { for (int cols = 0; cols < 5; cols++) { buttons[index] = new JButton(labels[index]); panel.add(buttons[index]); index++; } add(tField, BorderLayout.NORTH); add(panel, BorderLayout.CENTER); } JButton buttons = new JButton("clear"); add(buttons,BorderLayout.EAST); setVisible(true); pack(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { Example08 f = new Example08(); } }
9) 배치 관리자
다음과 같이 난수를 발생하여서 레이블을 불규칙하게 배치하여 보자.
어떤 배치 관리자를 어떻게 사용하여야 하는가?
import javax.swing.*; import java.awt.*; import java.util.HashSet; import java.util.Set; public class Example09 extends JFrame { private int[] labels; // 배열 초기화 private JPanel panel; public Example09() { setSize(400, 200); setLayout(null); // 배열 크기 지정 int num = 20; labels = new int[num]; // 랜덤 위치에 배치 Set<Point> usedLocations = new HashSet<>(); for (int index = 0; index < num; index++) { // 올바른 난수 범위로 수정 labels[index] = (int) (Math.random() * num); // 랜덤 위치에 JLabel 추가 (가정) JLabel label = new JLabel(String.valueOf(labels[index])); Point location; do { int x = (int) (Math.random() * 350); int y = (int) (Math.random() * 80); location = new Point(x, y); } while (usedLocations.contains(location)); usedLocations.add(location); label.setBounds(location.x, location.y, 400, 80); add(label); } setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { Example09 f = new Example09(); } }
Share article