[ Window 창 만들기 활용 ]
* Yes 버튼, No 버튼 누르면 각각 다른 내용 출력
: Frame / Button / ActionEvent / ActionListener / getActionCommand
setLayout / setSize / setLocation / setVisible / add
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
|
package day14;
import java.awt.Button;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MyWin6 extends Frame{
Button btnYes, btnNo; // 상속이 아닌, 포함 관계인 '멤버변수'
MyWin6() {
// super(); // 자동으로 호출됨
// // 배치관리자 변경
// FlowLayout f1 = new FlowLayout();
//
// // 현재 창의 기본 배치관리자를 변경
// this.setLayout(f1); >> 생략 가능
// setLayout(f1);
// 배치 관리자를 사용하지 않고 커스텀하게 컴포넌트를 배치하게 하고자 한다면
setLayout(null);
// 멤버변수 초기화
btnYes = new Button("YES");
btnNo = new Button("NO");
// 이벤트 처리
// 1. event source : btnYes
Handler3 hd = new Handler3(); // > 아래에 Handler 클래스도 추가
// 2. event listener : ActionListener를 추가
//addXXXXListener() > 처리해줄 객체를 매개변수로
btnYes.addActionListener(hd); // ActionListener 인터페이스를 구현한 객체가 매개변수로 전달 되어야 함
btnNo.addActionListener(hd);
// 3. 어떤 일을 처리(Handler)
// 현재 프레임에 이 컴포넌트를 부착 >> 순서가 중요!
// 컴포넌트의 크기
btnYes.setSize(100, 100);
btnNo.setSize(100, 100);
// 위치를 지정
btnYes.setLocation(100, 300);
btnNo.setLocation(300, 300);
// 추가
add(btnYes); // 위치 지정 없이 부착하면 center에 버튼 하나만 보이게 부착됨
add(btnNo);
setSize(500,500);
setLocation(250,250);
setVisible(true);
}
public static void main(String[] args) {
MyWin6 mw = new MyWin6();
}
}
class Handler3 implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// System.out.println(e); // 이벤트 안의 정보 출력
String cmd = e.getActionCommand();
System.out.println("cmd : "+cmd); // cmd : 버튼에 쓰여 있는 레이블
// cmd가 yes면 YES 버튼 눌림, No면 NO 버튼 눌림 메시지 출력
// if(cmd == "YES") > 이건 참조값이 같은지 확인하는 명령 BUT, 우리는 내용이 같아야!
if(cmd.equals("YES")) {
System.out.println("YES 버튼 눌림");
} else if (cmd.equals("NO")) {
System.out.println("NO 버튼 눌림");
}
}
}
|
cs |
* 텍스트 입력 받고 Read 누르면 출력, EXIT 누르면 종료
: Frame / Button / ActionEvent / ActionListener / getActionCommand / TextField
setLayout / setSize / setLocation / setVisible / add
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
|
package day14;
import java.awt.Button;
import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MyWin7 extends Frame implements ActionListener {
/// 멤버변수 --> 전역변수와 같다.
Button btnEXIT, btnRead ;
TextField tf;
MyWin7() {
// 기본배치관리자 x > 커스텀
setLayout(null);
// 멤버변수 초기화
tf = new TextField();
btnEXIT = new Button("EXIT");
btnRead = new Button("Read");
// 종료버튼을 누르면
// 종료합니다. 라는 메세지를 콘솔에 출력
// 프로그램을 종료 >> System.exit(0); : 정상종료
// Handler4 hd = new Handler4(); // > Handler 클래스도 추가
// but, 이벤트 처리하는 기능을 재사용할 가능성이 없다면, 굳이 클래스로 만들 필요 x
// 현재 내 클래스가 ActionPerformed 인터페이스를 구현한 클래스로 만든다.
btnEXIT.addActionListener(this); // ActionListener 인터페이스를 구현한 객체가 ()에
btnRead.addActionListener(this);
// this : 내 클래스를 이 인터페이스를 구현한 클래스이므로
// implemets ActionListener 위에 추가
// 컴포넌트의 크기와 위치를 따로 지정
btnEXIT.setSize(250, 50);
btnEXIT.setLocation(120, 400);
btnRead.setSize(150, 50);
btnRead.setLocation(250, 150);
tf.setSize(150, 80);
tf.setLocation(80, 150);
// 버튼 부착
add(btnEXIT);
add(btnRead);
add(tf);
// 창 크기, 위치 생성
setTitle("종료");
setSize(500, 500);
setLocation(250, 250);
setVisible(true);
}
public static void main(String[] args) {
MyWin7 mw = new MyWin7();
}
@Override
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
if(cmd.equals("Read")) {
System.out.println("Read 버튼 눌림");
String msg = tf.getText();
System.out.println("TextField : " + msg);
} else if (cmd.equals("EXIT")) {
System.out.println("종료합니다.");
System.exit(0); // 정상종료, 다른 번호는 비정상 종료
}
}
}
//class Handler4 implements ActionListener {
//
// @Override
// public void actionPerformed(ActionEvent e) {
// System.out.println("종료합니다.");
// System.exit(0);
// }
|
cs |
* Login 창 만들기
: Frame / Button / ActionEvent / ActionListener / getActionCommand / TextField / Label
setLayout / setSize / setLocation / setVisible / add / getText
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
|
package day14;
import java.awt.Button;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Login extends Frame implements ActionListener{
Button btnLogin, btnExit;
TextField tfId, tfPw;
Label lbId, lbPw;
Login() {
// 배치관리자를 사용하지 x > 커스텀
setLayout(null);
// 컴포넌트 초기화
btnLogin = new Button("Login");
btnExit = new Button("Exit");
tfId = new TextField();
tfPw = new TextField();
lbId = new Label("ID");
lbPw = new Label("PW");
// 컴포넌트의 크기와 위치를 지정
lbId.setSize(100, 50);
lbId.setLocation(100, 100);
lbPw.setSize(100, 50);
lbPw.setLocation(100, 200);
tfId.setSize(100, 50);
tfId.setLocation(300, 100);
tfPw.setSize(100, 50);
tfPw.setLocation(300, 200);
btnLogin.setSize(100, 50);
btnLogin.setLocation(100, 350);
// btnExit.setSize(100, 50);
// btnExit.setLocation(300, 350);
btnExit.setBounds(300, 350, 100, 50); // x, y, 너비, 높이
//이벤트 처리 (인터페이스 이름 : ActionListener)
btnLogin.addActionListener(this);
btnExit.addActionListener(this);
// 컴포넌트를 현재 프레임에 부착
add(btnLogin);
add(btnExit);
add(tfId);
add(tfPw);
add(lbId);
add(lbPw);
// 윈도우 창 만들기
setTitle("로그인 창");
setSize(500, 500);
setLocation(1000, 100);
setVisible(true);
}
public static void main(String[] args) {
Login li = new Login();
}
@Override
public void actionPerformed(ActionEvent e) {
// System.out.println("버튼 눌림");
String cmd = e.getActionCommand();
if(cmd.equals("Exit")) {
System.out.println("종료합니다.");
System.exit(0); // 정상종료, 다른 번호는 비정상 종료
} else if (cmd.equals("Login")) {
// 텍스트 필드의 값 가져오기
String Id = tfId.getText();
String Pw = tfPw.getText();
// 콘솔에 출력
System.out.println("id : " + Id + "pw : " + Pw);
}// if end
}// action performed end
}// class end
|
cs |
* 윈도우 창 닫히는 법
: Frame / Button / WindowEvent / WindowListener / WindowClosing
setBounds / etVisible / mouseMoved
피타고라스의 정리 / Math.sqrt(더블타입값);
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
|
package day14;
import java.awt.Frame;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
public class MyWin8 extends Frame implements WindowListener {
MyWin8() {
this.addWindowListener(null);
setBounds(1000, 150, 600, 500);
setVisible(true);
}
public static void main(String[] args) {
MyWin8 mw = new MyWin8();
}
@Override
public void windowOpened(WindowEvent e) {
System.out.println("창이 열릴 때 호출");
}
@Override
public void windowClosing(WindowEvent e) {
System.out.println("창이 종료중일때 호출");
System.exit(0);
}
@Override
public void windowClosed(WindowEvent e) {
System.out.println("창이 종료된 후에 호출");
}
@Override
public void windowIconified(WindowEvent e) {
System.out.println("창이 아이콘화 되었을 때 호출");
}
@Override
public void windowDeiconified(WindowEvent e) {
System.out.println("창이 비아이콘화 되었을 때 호출");
}
@Override
public void windowActivated(WindowEvent e) {
System.out.println("창이 활성화 되었을 때 호출");
}
@Override
public void windowDeactivated(WindowEvent e) {
System.out.println("창이 비활성화 되었을 때 호출");
}
}
|
cs |
* 버튼이 도망다니는 윈도우 창
: Frame / Button / Color / Label / MouseEvent / MouseMotionListener / WindowEvent / WindowListener
setLayout / setBounds / setVisible / windowClosing /
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
package day14;
import java.awt.Button;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Label;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
public class MyWin9 extends Frame implements WindowListener, MouseMotionListener {
// 멤버변수(전역변수) 선언
Button btnYes, btnNo;
Label lb;
MyWin9 () {
// 배치 레이아웃 > 커스텀
setLayout(null);
// 컴포넌트 초기화
btnYes = new Button("YES");
btnNo = new Button("NO");
lb = new Label("당신은 잘생겼다고 생각하십니까?");
// 부착
lb.setBounds(150, 50, 600, 30);
lb.setBackground(Color.red); // 레이블의 배경색
btnYes.setBounds(200, 500, 100, 50);
btnNo.setBounds(500, 500, 100, 50);
add(btnYes);
add(btnNo);
add(lb);
// 마우스 움직임을 감지 : mouseMoved
addMouseMotionListener(this);
addWindowListener(this); // 창 종료 : windowClosing
setBounds(250, 250, 800, 600);
setVisible(true);
}
public static void main(String[] args) {
MyWin9 mw = new MyWin9();
}
@Override
public void windowOpened(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowClosing(WindowEvent e) {
System.out.println("종료합니다");
System.exit(0);
}
@Override
public void windowClosed(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowIconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowDeiconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowActivated(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowDeactivated(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseMoved(MouseEvent e) {
// System.out.println("마우스 움직임");
int x = e.getX(); // 이벤트가 일어난 x 좌표값
int y = e.getY();
// System.out.println("마우스 위치 : (" + x + " , " + y + " ) ");
int yx = btnYes.getX()+50; // 너비의 절반만큼 더하기 => 중앙값 맞추기
int yy = btnYes.getY()+25; // 높이의 절반만큼 더하기 => 중앙값 맞추기
// a^2 + b^2 = c^2 <피타고라스의 정리>
// double value =
// (x - yx)*(x - yx) + (y - yy)*(y - yy);
// Math.sqrt(더블타입값); > 루트 씌워줌 : 제곱근 구하는 메서드
// int dis = (int)Math.sqrt(value);
// 한줄로!
int dis = (int)(Math.sqrt((x - yx)*(x - yx)
+ (y - yy)*(y - yy)));
System.out.println("거리 : "+dis);
if(dis < 80) {
// System.out.println("아 가까워 졌어...");
// btnYes.setLocation(e.getX()+50, e.getY()+50); // 버튼 이동
// 더 재밌게 이동!
int rx = (int)(Math.random()*700);
int ry = (int)(Math.random()*500);
btnYes.setLocation(rx, ry);
}
}
}
|
cs |
* eclipse : 윈도우 창에 한글 안나올 때 run - run configurations - arguments - vm arguments에 -Dfile.encoding=MS949 입력 common - encoding - other에 MS949 입력 window - preferences - enc 검색하고, workspace - text file encoding에 MS949 입력 |
[ 응용 ]
Q01.
300,300 크기
150,150 위치 하는 창을 만들고
창 타이틀 : 샘플 윈도우
중앙과 하단에 버튼 1개씩 생성
Q02.
Q01에서 종료버튼을 추가하고 누를때 "종료합니다~~~ " 출력 후
프로그램이 종료할수 있도록 코드를 작성!
package day14;
import java.awt.Button;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.logging.Handler;
public class Day14Q001 extends Frame implements ActionListener{
// 멤버변수
Button btn1, btn2, btnExit;
Day14Q001(){
// 배치 레이아웃 커스텀
setLayout(null);
// 컴포넌트 초기화
btn1 = new Button("1");
btn2 = new Button("2");
btnExit = new Button("Exit");
// ActionListener : import하고 클래스 추가
btnExit.addActionListener(this);
btn1.setBounds(130, 80, 50, 50);
btn2.setBounds(130, 140, 50, 50);
btnExit.setBounds(110, 200, 100, 50);
// 버튼 부착
add(btn1);
add(btn2);
add(btnExit);
// 창 크기, 위치
setTitle("샘플 윈도우");
setBounds(150, 150, 300, 300);
setVisible(true);
}
public static void main(String[] args) {
Day14Q001 mw = new Day14Q001();
} // main end
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("종료합니다.");
System.exit(0);
}
} // class end
Q03.
800,600 크기
200,200 위치
타이틀 : 종료가능창
기능 :x 버튼 누르면 종료
정 중앙에 큰 버튼으로 구구단 버튼을 만든후
클릭하면 콘솔에 랜덤하게 구구단중 1개의단을 출력시켜준다.
package day14;
import java.awt.Button;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
public class Day14Q003 extends Frame implements ActionListener, WindowListener {
// 전역변수
Button btnX, btnDan;
Day14Q003() {
// 배치 레이아웃 커스텀
setLayout(null);
// 컴포넌트 초기화
btnDan = new Button("GuGuDan");
// ActionListener : import하고 클래스 추가
btnDan.addActionListener(this);
// WindowListenr : import하고 클래스 추가
addWindowListener(this); // 창 종료 : windowClosing
// 버튼 크기, 위치
btnDan.setBounds(250, 150, 300, 300);
// 버튼 부착
add(btnDan);
// 창 크기, 위치
setTitle("종료가능창");
setBounds(200, 200, 800, 600);
setVisible(true);
}
public static void main(String[] args) {
Day14Q003 mw = new Day14Q003();
} // main end
@Override
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
if(cmd.equals("GuGuDan")) {
int j = (int)(Math.random()*8+2);
for(int i=1; i<=9; i++) {
System.out.println(j+" * "+i+" = "+i*j);
} // for문 end
} // if문 end
} // performed end
@Override
public void windowOpened(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowClosing(WindowEvent e) {
System.out.println("창이 종료중일때 호출");
System.exit(0);
}
@Override
public void windowClosed(WindowEvent e) {
}
@Override
public void windowIconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowDeiconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowActivated(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowDeactivated(WindowEvent e) {
// TODO Auto-generated method stub
}
} // class end
Q04.
800,600 크기
200,200 위치
타이틀 : 마우스 움직임
기능 : 마우스를 움직이면 현재 마우스의 위치를 콘솔 화면에 출력
package day14;
import java.awt.Frame;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
public class Day14Q004 extends Frame implements MouseMotionListener {
Day14Q004() {
// 마우스 움직임을 감지 : mouseMoved
addMouseMotionListener(this);
// 창 제목, 크기, 위치
setTitle("마우스 움직임");
setBounds(200, 200, 800, 600);
setVisible(true);
}
public static void main(String[] args) {
Day14Q004 mw = new Day14Q004();
}
@Override
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseMoved(MouseEvent e) {
// x와 y의 좌표값
int x = e.getX();
int y = e.getY();
System.out.println("x : "+x+", : "+y);
}
}
Q05. 이벤트 처리 순서는?
1. event source
2. event listener > import, class 생성
3. 어떤 일을 처리
Q06.
800,600 크기
200,200 위치
타이틀 : 버턴의 위치
기능 : 랜덤하게 버튼 1개를 100,50 크기로 생성하고
버튼을 클릭하면 이 버튼이 랜덤위치로 이동하는 기능을 구현하세요
package day14;
import java.awt.Button;
import java.awt.Frame;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
public class Day14Q006 extends Frame implements MouseMotionListener {
// 전역변수
Button btnR;
Day14Q006() {
// 배치 레이아웃 커스텀
setLayout(null);
// 참조변수 초기화
btnR = new Button("R");
btnR.setBounds((int)(Math.random()*700), (int)(Math.random()*500),
100, 50);
// 버튼 부착
add(btnR);
// 마우스 움직임을 감지 : mouseMoved > import, class 추가
addMouseMotionListener(this);
// 창 제목, 크기, 위치
setTitle("버튼의 위치");
setBounds(200, 200, 800, 600);
setVisible(true);
} // 생성자 end
public static void main(String[] args) {
Day14Q006 mw = new Day14Q006();
} // main end
@Override
public void mouseDragged(MouseEvent e) {
}
@Override
public void mouseMoved(MouseEvent e) {
// 마우스의 x, y 좌표값
int x = e.getX();
int y = e.getY();
int yx = btnR.getX()+50; // 너비의 절반만큼 더하기 => 중앙값 맞추기
int yy = btnR.getY()+25; // 높이의 절반만큼 더하기 => 중앙값 맞추기
// 버튼과 거리 측정
int dis = (int)(Math.sqrt((x - yx)*(x - yx)
+ (y - yy)*(y - yy)));
System.out.println("dis : "+dis);
// 버튼 이동
if(dis < 100) {
int rx = (int)(Math.random()*700);
int ry = (int)(Math.random()*500);
btnR.setLocation(rx, ry);
} // if문 end
} // mouse event end
} // class end
'Java' 카테고리의 다른 글
[Java] 윈도우 창 만들기 <응용> - 로봇 움직이기 (0) | 2023.03.22 |
---|---|
[Java] Window Adapter 윈도우 어댑터 / Inner Class (Member, Static, Local, Anonymous) / 윈도우 창 응용 (버튼 50개, 구구단) (0) | 2023.03.22 |
[Java] Object / Class / System 클래스의 메서드 (0) | 2023.03.20 |
[Java] Window 창 만들기 ( Frame / Button / ActionEvent / ActionListener / FlowLayout ) (0) | 2023.03.20 |
[Java] Garbage Collector (0) | 2023.03.20 |