1. GUI (Graphic User Interface)
1) awt: Window 운영체제에 종속적 (버전마다 다름)
(1) 컨테이너
- Frame, Panel
(2) 컴포넌트
- Button, TextField, TextArea, CheckBox, ...
(3) 배치 관리자
- 구성하고자하는 컴포넌트의 배치 관리
1) FlowLayout
2) BorderLayout
3) GridLayout
4) CardLayout
(4) 이벤트
- 클릭하는 모든 행위
1) Button: ActionListener
2) Frame: WindowListener
3) Mouse: MouserListener
4) Keyboard: KeyListener
2) swing: Window 운영체제에 독립적
# GUI 연습하기 (1)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | package guiex; import java.awt.Frame; public class GuiTest01 { public static void main(String[] args) { // 컨테이너 Frame fr = new Frame(); fr.setTitle("awt practice"); fr.setSize(400, 400); fr.setLocation(500, 200); fr.setVisible(true); } } |
# 설명
Line 3: Frame 클래스를 사용하기 위해서 import java.awt.Frame을 선언해준다.
Line 9: Frame 클래스를 인스턴스화한다.
Line 10: setTitle(String s) > 인스턴스화한 Frame 클래스 객체인 fr에 타이틀을 설정해준다.
Line 12: setSize(int w, int h) > 프레임의 창 사이즈를 설정해준다.
Line 13: setLocation(int x, int y) > 왼쪽 상단 (0, 0)을 기준으로 하여 프레임의 위치를 설정해준다.
Line 15: setVisible(boolean b) > 기본값은 false이며, true인 경우 창이 보이게 된다.
# GUI 연습하기 (2)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | package guiex; import java.awt.Frame; public class GuiTest01 { public static void main(String[] args) { // 컨테이너 Frame fr = new Frame("awt practice"); fr.setBounds(500, 200, 400, 400); fr.setVisible(true); } } | cs |
# 설명
Line 9: Frame 클래스의 생성자 중 setTitle() 메소드의 기능과 동일하게 프레임의 타이틀을 설정해준다.
Line 11: setBounds(int x, int y, int w, int h) > setSize(int w, int y)와 setLocation(int x, int y)의 메소드를 한 번에 사용할 수 있다.
# 실행 결과
# Frame을 정중앙에 배치하기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | package guiex; import java.awt.Dimension; import java.awt.Frame; import java.awt.Toolkit; public class GuiTest02 { public static void main(String[] args) { // frame 정중앙 배치 Frame fr = new Frame("awt practice2"); fr.setSize(300, 300); // window 사이즈 가져오기 Toolkit tk = Toolkit.getDefaultToolkit(); Dimension screenSize = tk.getScreenSize(); System.out.println("screenSize: " + screenSize); int screenWidth = screenSize.width; int screenHeight = screenSize.height; // frame 사이즈 가져오기 Dimension frameSize = fr.getSize(); int frameWidth = frameSize.width; int frameHeight = frameSize.height; fr.setLocation(screenWidth/2 - frameWidth/2, screenHeight/2 - frameHeight/2); fr.setVisible(true); } } | cs |
# 설명
Line 11: Frame 클래스를 타이틀을 설정할 수 있는 생성자로 인스턴스화한다.
Line 12: 프레임의 사이즈를 설정한다.
Line 15: Toolkit 클래스를 getInstance() 메소드처럼 객체로 반환한다.
Line 16: Toolkit tk 객체의 메소드로 현재 스크린의 사이즈를 Dimension 클래스 타입 변수로 받아온다.
Line 19~20: 받아온 스크린 사이즈의 가로, 세로를 각각 저장한다.
Line 23: Dimension 타입 변수로 프레임의 사이즈를 가져온다.
Line 24~25: 프레임의 가로, 세로를 각각 저장한다.
Line 26: 프레임을 정중앙 배치시킨다.
# 실행 결과
# 프레임 정중앙 배치하기
# Frame 클래스를 상속받아 사용하기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | package guiex; import java.awt.Button; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.Toolkit; public class GuiTest03 extends Frame { Button btnConfirm; Button btnCancel; public GuiTest03() { // #1. 컨테이너 // setTitle("awt practice3"); super("awt practice3"); setSize(300, 300); Toolkit tk = Toolkit.getDefaultToolkit(); Dimension screenSize = tk.getScreenSize(); System.out.println("screenSize: " + screenSize); int screenWidth = screenSize.width; int screenHeight = screenSize.height; setLocation(screenWidth/2 - 150, screenHeight/2 - 150); setLayout(null); setLayout(new FlowLayout()); // #2. 컴포넌트 // 변수의 선언과 저장은 재사용이 될 때 하는 것이 좋다. btnConfirm = new Button("확인"); btnConfirm.setSize(100, 50); btnConfirm.setBackground(Color.WHITE); btnConfirm.setForeground(Color.blue); btnCancel = new Button("취소"); btnCancel.setSize(100, 50); btnCancel.setBackground(Color.BLACK); btnCancel.setForeground(Color.green); // #3. 컨테이너에 컴포넌트 add() // add(new Button("취소")); add(btnConfirm); add(btnCancel); } public static void main(String[] args) { GuiTest03 g3 = new GuiTest03(); g3.setVisible(true); // Frame 상속 받았으므로 g3에서 접근가능 } } | cs |
# 설명
Line 10: Frame 클래스를 상속받는다.
Line 12~13: Button 객체를 선언한다.
Line 15~48: GuiTest03 클래스의 기본 생성자 부분
Line 17~18: Line 17에서처럼 setTitle() 메소드를 통하여 타이틀을 설정할 수 있지만 Frame 클래스를 상속받았기 때문에,
Frame 클래스의 생성자 중 타이틀을 매개변수로 하는 생성자가 있기 때문에 super()를 통하여 지정한다.
Line 21~27: 프레임을 정중앙 배치시킨다.
Line 29~30: 추후에 공부할 예정!
Line 34: 선언한 버튼 객체를 라벨을 매개변수로 하는 생성자 메소드를 통하여 생성한다.
Line 36: setBackground(Color c) > 버튼 객체의 바탕색을 설정한다.
Line 37: setForeground(Color c) > 버튼 객체의 텍스트색을 설정한다..
* Color 클래스의 상수 변수값들은 대문자와 소문자 모두 사용할 수 있다.
Line 45: add(new Button("취소")); 처럼 일회성으로 사용하는 객체인 경우 이와 같이 선언할 수 있지만,
재사용이 되는 객체인 경우 일반적으로 생성하는 것이 좋다.
Line 46~47: 컨테이너 프레임에 컴포넌트 버튼 객체를 올려놓는다.
Line 53: GuiTest03 객체인 g3는 Frame 클래스를 상속 받았으므로 Frame 클래스의 메소드들을 상속받아 사용할 수 있다.
# 실행 결과
'JAVA > JAVA2' 카테고리의 다른 글
JAVA2_day11 | GUI (TextField, TextArea) (0) | 2018.01.30 |
---|---|
JAVA2_day11 | GUI (Button) (0) | 2018.01.29 |
JAVA2_day08 | String 메소드 연습문제 (WordChange) (0) | 2018.01.23 |
JAVA2_day08 | Final, Wrapper 클래스 (0) | 2018.01.23 |
JAVA2_day08 | Date 클래스, Calendar 클래스 (0) | 2018.01.23 |