Java

[Java] Window 창 만들기 ( Frame / Button / ActionEvent / ActionListener / FlowLayout )

소댓 2023. 3. 20. 18:01

[ Window 창 만들기 ]

 

* 버튼을 누르면 '클릭됨'이 출력되는 윈도우창

 

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
57
58
59
60
61
62
package day13;
 
import java.awt.Button;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
// 윈도우창 : Frame
// 350, 350 크기
/// 400, 400 위치
// 창 타이틀 : 이벤트 처리
 
// 이벤트 처리 순서
// 1. event source를 결정 : btn
// 2. event source에 감지기를 부착
// 3. handler를 정의
 
public class MyWin3 extends Frame{
    // Frame : 컨테이너 ( > 조상 컨테이너를 상속 받음)
    // MyWin3 : 컨테이너 ( > Frame을 상속 받아 컨테이너)
    
    Button btn;
    // 다른 컴포넌트를 담을 수 있는 컴포넌트 : 컨테이너
    
        MyWin3(){
            
            // 컴포넌트 초기화
            btn = new Button("Click me");
            
            // btn.add감지기종류Listener()
            
            Handler hd = new Handler(); // 핸들러 객체 정의
    
            // ActionListener (인터페이스를 구현한 객체); // 액션을 감지하는 수신기 추가
            btn.addActionListener(hd);
            
            //버튼 윈도우 추가
            add(btn); // Frame의 기본 배치 관리자 : Border Layout, Center 추가
                        
            setTitle("이벤트 처리");
            setSize(350,  350);
            setLocation(400400);
            setVisible(true);
        }
 
 
    public static void main(String[] args) {
    
        MyWin3 mw = new MyWin3();    
    } // main method end
// MyWin3 class end
 
// 하나의 자바파일에 하나의 클래스만 두는 것이 일반적..
// 하지만, 연관성이 있다면 2개 이상의 클래스를 정의하는 것도 가능
// public Class는 1개만 있어야 한다.
 
class Handler implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("클릭됨");
    }
}
cs

 

 

* 버튼을 누르면 '안녕하세요'가 출력되는 윈도우 창

 

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 day13;
 
import java.awt.Button;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
// 창 크기 : 300, 300
// 위치 : 250, 250
// 타이틀 : 이벤트 처리
// 화면 중앙에 버튼
// 버튼을 클릭하면 : 안녕하세요 메시지 이클립스 콘솔에 출력
 
// 이벤트 source : btn
 
// Frame 상속
public class MyWin4 extends Frame{
    
    // 버튼 만들기
    Button btn;
    
    MyWin4() {
        
        // 컴포넌트 초기화
        btn = new Button("Hello~");
        
        Handler2 hd = new Handler2(); // 핸들러 객체 정의
        // 그냥 Handler로 하면 MyWin3의 내용이 출력됨
        
        // 액션을 감지하는 수신기 추가
        btn.addActionListener(hd);
        
        
        add(btn); // 화면에 버튼 추가
        
        setTitle("이벤트 처리");
        setSize(300300);
        setLocation(250250);
        setVisible(true);
    }
 
    public static void main(String[] args) {
        MyWin4 mw = new MyWin4();
    }
    
    class Handler2 implements ActionListener{
 
        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("안녕하세요");
            
        }
        
    }
}
 
cs

 

 

* Yes, No 버튼 장착하고 Yes가 출력되는 윈도우 창

 

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
57
package day13;
 
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class MyWin5 extends Frame {
    
    // Yes버튼, No버튼
    Button btnYes, btnNo;
    
    MyWin5() {
        // 배치관리자를 변경
        // FlowLayout
        FlowLayout f1 = new FlowLayout();
        
        setLayout(f1);
        
        // Yes 버튼을 클릭하면 Yes라는 메세지가 콘솔에 출력
        // Handler3 class <== 
        
        
        btnYes = new Button("Yes");
        btnNo = new Button("No");
        
        Handler3 hd = new Handler3(); // 핸들러 정의
        btnYes.addActionListener(hd);
        // btnYes.addActionListener(hd); 
        // 액션을 강조하는 리스너를 줘야 감지할 수 있음
        
        add(btnYes);
        add(btnNo);
        
        // Yes 버튼, No 버튼
        setSize(500500);
        setLocation(150150);
        setVisible(true);
        
    }
    public static void main(String[] args) {
        MyWin5 mw = new MyWin5();
    }
    
    class Handler3 implements ActionListener{
 
        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("Yes");
            
        }
    
 
    }
    
}
cs