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(400400);
        fr.setLocation(500200);
        
        fr.setVisible(true);
        
    }
}

cs

# 설명

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(500200400400);
        
        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(300300);
        
        // 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/- frameWidth/2, screenHeight/- 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(300300);
        
        Toolkit tk = Toolkit.getDefaultToolkit();
        Dimension screenSize = tk.getScreenSize();
        System.out.println("screenSize: " + screenSize);
        
        int screenWidth = screenSize.width;
        int screenHeight = screenSize.height;
        setLocation(screenWidth/- 150, screenHeight/- 150);
        
        setLayout(null);
        setLayout(new FlowLayout());
        
        // #2. 컴포넌트 
        // 변수의 선언과 저장은 재사용이 될 때 하는 것이 좋다. 
        btnConfirm = new Button("확인");
        btnConfirm.setSize(10050);
        btnConfirm.setBackground(Color.WHITE);
        btnConfirm.setForeground(Color.blue);
        
        btnCancel = new Button("취소");
        btnCancel.setSize(10050);
        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 클래스의 메소드들을 상속받아 사용할 수 있다.


# 실행 결과