문제
아래의 실행결과처럼 가로, 세로 크기가 5인 빙고판을 만드시오. 그리고 버튼을 누르면, 버튼의 배경색이 밝은 회색(Color.LIGHT_GRAY)으로 바뀌고 누른 버튼의 글자가 콘솔에 출력되게 하시오.
나의풀이
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
|
package sorasNewPackage;
import java.awt.Button;
import java.awt.Color;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Test190826_1 {
public static void main(String args[]) {
Frame f = new Frame("GridLayoutTest");
f.setSize(600, 600);
f.setLayout(new GridLayout(5, 5));
int a = 1;
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
Button bt = new Button("새" + a++);
f.add(bt);
Actions ac = new Actions(i, j);
ac.bt = bt;
ac.name = "새" + a++;
bt.addActionListener(ac);
}
}
f.setVisible(true);
}
}
class Actions implements ActionListener {
Button bt;
String name;
int x, y;
static boolean bingo[][] = new boolean[5][5];
Actions(int x, int y) {
this.x = x;
this.y = y;
}
public void actionPerformed(ActionEvent e) {
setButton(this.bt);
}
void setButton(Button bt) {
bt.setBackground(Color.LIGHT_GRAY);
bingo[this.x][this.y] = true;
System.out.println(name + " ");
bingoCheck();
}
void bingoCheck() {
int bingoCount = 0;
int diagonal_1 = 0;
int diagonal_2 = 0;
for (int i = 0; i < bingo.length; i++) {
int horizontal = 0;
int vertical = 0;
for (int j = 0; j < bingo[i].length; j++) {
// 가로체크
if (bingo[i][j])
horizontal += j;
// 세로체크
if (bingo[j][i])
vertical += j;
}
// 대각선체크_1
if (bingo[i][i])
diagonal_1 += i;
// 대각선체크_2
if (bingo[i][4 - i])
diagonal_2 += i;
if (horizontal == 10) {
bingoCount++;
}
if (vertical == 10) {
bingoCount++;
}
}
if (diagonal_1 == 10) {
bingoCount++;
}
if (diagonal_2 == 10) {
bingoCount++;
}
if (bingoCount > 0)
System.out.println("●현재 " + bingoCount + "빙고");
}
}
|
cs |
main메서드에 프레임을 정의하고 반복문을 통해 버튼을 생성했다.
실제 2차원 빙고 배열은 이벤트를 처리하는 Actions메서드에 정의했고 메인메서드에서는 그 인덱스만을 매개변수로 넘겨주었다. 버튼의 색을 변경하고, 콘솔에 버튼의 이름을 출력할때 매개변수를 넘겨주는 방법 말고
이벤트 처리 메서드에
Button btn = (Button)ae.getSource();를 추가하여 이벤트가 발생한 Button의 Source를 가져온 후
System.out.println(btn.getLabel());
이런식으로 라벨(버튼라벨)을 출력해주면 더 간단해진다.
실행결과
'Tech > Java' 카테고리의 다른 글
[Java] Daemon Thread (1) | 2019.08.30 |
---|---|
[Java] 날짜와 시간 & 형식화(date, time and formatting) (0) | 2019.08.29 |
[Java] 컬렉션 프레임웍(Collections Framework) 연습문제 (0) | 2019.08.23 |
[Java] 컬렉션 프레임워크(Collections Framework) (0) | 2019.08.22 |
[Java] Vector 구현 (0) | 2019.08.21 |
댓글