1. GUI 연습문제 (1)

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
package guiex;
 
import java.awt.Frame;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
 
public class GuiTest11 {
    public static void main(String[] args) {
        
        Frame fr = new Frame("마우스 이벤트");
        fr.setBounds(100200500500);
        fr.setVisible(true);
        
        PopupMenu menu = new PopupMenu();
        menu.add(new MenuItem("cut"));
        menu.add(new MenuItem("copy"));
        menu.add(new MenuItem("paste"));
        fr.add(menu);
        
        fr.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        
        fr.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                System.out.println("Mouse Click!");
            }
            
            @Override
            public void mousePressed(MouseEvent e) {
                System.out.println(e.getModifiers());
                
                if(e.getModifiers() == MouseEvent.BUTTON3_MASK) {
                    System.out.println("Right button Click!");
                    menu.show(fr, e.getX(), e.getY());
                }
            }
        });
 
    }
}
cs

# 설명

Line 18: PopupMenu 컴포넌트를 생성한다.

Line 19~21: PopupMenu에 MenuItem들을 붙인다. 

Line 24~29: 프레임의 닫기버튼을 눌렀을 경우 프로그램을 종료시킨다. 

Line 31~46: 마우스 이벤트를 통해 처리하는 부분

Line 33~35: 마우스가 클릭되었을 때 문자열을 출력한다.

Line 38~45: 마우스가 눌렸을 때 실행되는 부분

Line 41~43: 만약 마우스의 오른쪽 버튼을 눌렀다면, 그 자리에서 PopupMenu가 보여지게 된다. 


# 실행 화면 



2. GUI 연습문제 (2)

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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
package guiex;
 
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
 
class MessageBox {
 
    Frame fr;
    Panel nPanel;
    Panel sPanel;
    TextField tf;
    TextArea ta;
    Button nInput, sSave, sClear, sQuit;
 
    public MessageBox() {
        // 컨테이너
        fr = new Frame("Message Box");
 
        // NORTH
        nPanel = new Panel();
        nInput = new Button("Input");
        tf = new TextField(20);
 
        // CENCER
        ta = new TextArea();
 
        // SOUTH
        sPanel = new Panel();
        sSave = new Button("Save");
        sClear = new Button("Clear");
        sQuit = new Button("Quit");
 
        layout();
        event();
    }// constructor()
 
    void layout() {
        // 컨테이너
        fr.setVisible(true);
        fr.setBounds(900300400600);
        fr.setBackground(Color.DARK_GRAY);
        fr.setLayout(new BorderLayout());
        fr.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 20));
 
        // NORTH
        fr.add(nPanel, BorderLayout.NORTH);
        nPanel.setBackground(Color.PINK);
        nPanel.add(tf);
        nPanel.add(nInput);
 
        // CENTER
        fr.add(ta);
 
        // SOUTH
        fr.add(sPanel, BorderLayout.SOUTH);
        sPanel.setBackground(Color.PINK);
        sPanel.add(sSave);
        sPanel.add(sClear);
        sPanel.add(sQuit);
    }// layout()
 
    void event() {
 
        // Frame Exit
        fr.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
 
        ta.setEditable(false);
 
        // Input Button
        nInput.addActionListener(new ActionListener() {
 
            @Override
            public void actionPerformed(ActionEvent e) {
                if (e.getActionCommand().equals("Input")) {
                    if (!(tf.getText().charAt(0== ' ')) {
                        ta.append(tf.getText() + "\n");
                    }
                    tf.setText(""); // 입력후, 텍스트제거
                    tf.requestFocus(); // 입력후, 커서 활성화
                }
            }
        });
 
        // Quit Button
        sQuit.addActionListener(new ActionListener() {
 
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });
        
        // Clear Button
        sClear.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent e) {
                ta.setText("");
            }
        });
    }// event()
}
 
public class GuiTest12 {
    public static void main(String[] args) {
 
        new MessageBox();
 
    }
}
cs

# 설명

Line 66~89: 컨테이너, 컴포넌트를 지정하는 layout() 메서드

Line 91~135: 이벤트 발생시 처리하는 event() 메서드

Line 101: TextArea 영역을 수정할 수 없게 지정한다.

Line 104~116: TextField 영역을 통해 입력한 문자열을 TextArea 영역에 덧붙인다. 

단, 공백일 경우에는 붙이지 않는다. 

Line 108: 현재 이벤트를 발생한 컴포넌트의 레이블이 Input과 같은 때 이하 코드가 실행된다. 

Line 109: 만약 입력된 문자열의 첫번째 문자가 공백이 아닐 때 이하 코드가 실행된다.

Line 110: 입력된 문자열을 TextArea에 붙인다. 

Line 112: 입력 후 TextField의 텍스트를 제거한다. 

Line 113: 입력 후 TextField에 커서를 활성화시킨다. 

Line 119~125: Quit 버튼을 눌렀을 때 이벤트를 처리하는 부분

Line 128~134: Clear 버튼을 눌렀을 때 이벤트를 처리하는 부분 

Line 132: TextArea에 있는 모든 텍스트들을 공백처리하여 지운다. 


# 실행 화면