回答編集履歴
5
画像追加
test
CHANGED
@@ -52,7 +52,7 @@
|
|
52
52
|
|
53
53
|
|
54
54
|
|
55
|
-
![イメージ説明](
|
55
|
+
![イメージ説明](e3f8a20ab807a8887d096257c0b74634.png)
|
56
56
|
|
57
57
|
|
58
58
|
|
4
間違いの修正
test
CHANGED
@@ -1,24 +1,28 @@
|
|
1
|
-
※動作確認調査中※
|
2
|
-
|
3
|
-
図形描画されなくなっています
|
4
|
-
|
5
|
-
---
|
6
|
-
|
7
|
-
|
8
|
-
|
9
1
|
ボタンを押す毎に再描画することが出来たので参考になればと思います。
|
10
2
|
|
11
3
|
大まかな動きの流れなどの確認は出来るはずです。
|
12
4
|
|
13
5
|
|
14
6
|
|
7
|
+
追記:
|
8
|
+
|
9
|
+
[@umyu](https://teratail.com/users/umyu#reply)さんのご協力ご指導の元無事完成しました。
|
10
|
+
|
11
|
+
GUI初実装でしたのでとても勉強になりました。ありがとうございました。
|
12
|
+
|
13
|
+
|
14
|
+
|
15
15
|
ポイントは
|
16
16
|
|
17
17
|
・**ActionListener**インターフェースを使ってボタンがクリックされた場合のイベントを利用する
|
18
18
|
|
19
19
|
・ボタンがクリックされた状態をフラグを使って**ボタン制御**OnOffする
|
20
20
|
|
21
|
+
・paint()は使わずに**paintComponent()を@Override**して利用する
|
22
|
+
|
23
|
+
|
24
|
+
|
21
|
-
・**paint()
|
25
|
+
・描画用パネルgraphなどを作り**paintComponent()**内で**ボタン制御**OnOffを判定し再描画させたいものを制御する
|
22
26
|
|
23
27
|
・再描画はrepaint()で行う
|
24
28
|
|
@@ -54,14 +58,14 @@
|
|
54
58
|
|
55
59
|
```JAVA
|
56
60
|
|
61
|
+
package sample;
|
62
|
+
|
57
63
|
|
58
64
|
|
59
65
|
import java.awt.BorderLayout;
|
60
66
|
|
61
67
|
import java.awt.Color;
|
62
68
|
|
63
|
-
import java.awt.Dimension;
|
64
|
-
|
65
69
|
import java.awt.Graphics;
|
66
70
|
|
67
71
|
import java.awt.Graphics2D;
|
@@ -82,6 +86,8 @@
|
|
82
86
|
|
83
87
|
import javax.swing.JPanel;
|
84
88
|
|
89
|
+
import javax.swing.border.LineBorder;
|
90
|
+
|
85
91
|
|
86
92
|
|
87
93
|
public class SampleSwing extends JFrame implements ActionListener {
|
@@ -154,6 +160,70 @@
|
|
154
160
|
|
155
161
|
|
156
162
|
|
163
|
+
//paintComponent()は自動で呼び出されるので
|
164
|
+
|
165
|
+
//別途ボタン制御OnOffのフラグを判定し
|
166
|
+
|
167
|
+
//描画させたいものを制御する
|
168
|
+
|
169
|
+
|
170
|
+
|
171
|
+
//paint()は使わずに
|
172
|
+
|
173
|
+
//paintComponent()を@Overrideして利用する
|
174
|
+
|
175
|
+
|
176
|
+
|
177
|
+
JPanel graph = new JPanel() {
|
178
|
+
|
179
|
+
@Override
|
180
|
+
|
181
|
+
public void paintComponent(Graphics g) {
|
182
|
+
|
183
|
+
|
184
|
+
|
185
|
+
super.paintComponent(g);
|
186
|
+
|
187
|
+
|
188
|
+
|
189
|
+
if (!paintFlag1 && !paintFlag2) {
|
190
|
+
|
191
|
+
return;
|
192
|
+
|
193
|
+
}
|
194
|
+
|
195
|
+
|
196
|
+
|
197
|
+
Graphics2D g2 = (Graphics2D) g;
|
198
|
+
|
199
|
+
if (paintFlag1) {
|
200
|
+
|
201
|
+
g2.setColor(Color.BLUE);
|
202
|
+
|
203
|
+
}
|
204
|
+
|
205
|
+
if (paintFlag2) {
|
206
|
+
|
207
|
+
g2.setColor(Color.RED);
|
208
|
+
|
209
|
+
}
|
210
|
+
|
211
|
+
Ellipse2D ellipse = new Ellipse2D.Double(0, 70, 150, 150);
|
212
|
+
|
213
|
+
g2.draw(ellipse);
|
214
|
+
|
215
|
+
}
|
216
|
+
|
217
|
+
};
|
218
|
+
|
219
|
+
|
220
|
+
|
221
|
+
// JPanelのボーダー色を設定(可視化用)
|
222
|
+
|
223
|
+
graph.setBorder(new LineBorder(Color.CYAN));
|
224
|
+
|
225
|
+
|
226
|
+
|
157
227
|
JPanel p = new JPanel();
|
158
228
|
|
159
229
|
|
@@ -170,6 +240,12 @@
|
|
170
240
|
|
171
241
|
|
172
242
|
|
243
|
+
//図形描画
|
244
|
+
|
245
|
+
p.add(graph, BorderLayout.CENTER);
|
246
|
+
|
247
|
+
|
248
|
+
|
173
249
|
p.add(label1, BorderLayout.WEST);
|
174
250
|
|
175
251
|
p.add(label2, BorderLayout.EAST);
|
@@ -180,6 +256,8 @@
|
|
180
256
|
|
181
257
|
//ボタン制御OnOff
|
182
258
|
|
259
|
+
@Override
|
260
|
+
|
183
261
|
public void actionPerformed(ActionEvent e) {
|
184
262
|
|
185
263
|
String cmd = e.getActionCommand();
|
@@ -190,106 +268,36 @@
|
|
190
268
|
|
191
269
|
if (paintFlag1) {
|
192
270
|
|
271
|
+
label1.setText("ボタン1:青ON");
|
272
|
+
|
273
|
+
} else {
|
274
|
+
|
193
275
|
label1.setText("ボタン1:青OFF");
|
194
276
|
|
277
|
+
}
|
278
|
+
|
279
|
+
} else if (cmd.equals("Button 2")) {
|
280
|
+
|
281
|
+
paintFlag2 = !paintFlag2;
|
282
|
+
|
283
|
+
if (paintFlag2) {
|
284
|
+
|
285
|
+
label2.setText("ボタン2:赤ON");
|
286
|
+
|
195
287
|
} else {
|
196
288
|
|
197
|
-
label
|
289
|
+
label2.setText("ボタン2:赤OFF");
|
198
290
|
|
199
291
|
}
|
200
292
|
|
201
|
-
} else if (cmd.equals("Button 2")) {
|
202
|
-
|
203
|
-
paintFlag2 = !paintFlag2;
|
204
|
-
|
205
|
-
if (paintFlag2) {
|
206
|
-
|
207
|
-
label2.setText("ボタン2:赤OFF");
|
208
|
-
|
209
|
-
} else {
|
210
|
-
|
211
|
-
label2.setText("ボタン2:赤ON");
|
212
|
-
|
213
|
-
}
|
214
|
-
|
215
293
|
}
|
216
294
|
|
217
|
-
|
218
|
-
|
219
|
-
//paint()は自動で呼び出されるので
|
220
|
-
|
221
|
-
//別途ボタン制御OnOffのフラグを判定し
|
222
|
-
|
223
|
-
//描画させたいものを制御する
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
JPanel graph = new JPanel() {
|
228
|
-
|
229
|
-
@Override
|
230
|
-
|
231
|
-
public void paintComponent(Graphics g) {
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
super.paintComponent(g);
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
if (!paintFlag1 && !paintFlag2) {
|
240
|
-
|
241
|
-
super.paintComponent(g);
|
242
|
-
|
243
|
-
return;
|
244
|
-
|
245
|
-
}
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
Graphics2D g2 = (Graphics2D) g;
|
250
|
-
|
251
|
-
if (paintFlag1) {
|
252
|
-
|
253
|
-
g2.setColor(Color.BLUE);
|
254
|
-
|
255
|
-
}
|
256
|
-
|
257
|
-
if (paintFlag2) {
|
258
|
-
|
259
|
-
g2.setColor(Color.RED);
|
260
|
-
|
261
|
-
}
|
262
|
-
|
263
|
-
Ellipse2D ellipse = new Ellipse2D.Double(100, 100, 200, 200);
|
264
|
-
|
265
|
-
g2.draw(ellipse);
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
super.paintComponent(g);
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
}
|
274
|
-
|
275
|
-
};
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
graph.setPreferredSize(new Dimension(300, 300));
|
280
|
-
|
281
|
-
getContentPane().add(graph);
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
//
|
295
|
+
//再描画
|
286
296
|
|
287
297
|
repaint();
|
288
298
|
|
289
299
|
}
|
290
300
|
|
291
|
-
|
292
|
-
|
293
301
|
}
|
294
302
|
|
295
303
|
```
|
3
間違いの修正
test
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
※動作確認調査中※
|
2
|
+
|
3
|
+
図形描画されなくなっています
|
4
|
+
|
5
|
+
---
|
6
|
+
|
7
|
+
|
8
|
+
|
1
9
|
ボタンを押す毎に再描画することが出来たので参考になればと思います。
|
2
10
|
|
3
11
|
大まかな動きの流れなどの確認は出来るはずです。
|
@@ -46,10 +54,14 @@
|
|
46
54
|
|
47
55
|
```JAVA
|
48
56
|
|
57
|
+
|
58
|
+
|
49
59
|
import java.awt.BorderLayout;
|
50
60
|
|
51
61
|
import java.awt.Color;
|
52
62
|
|
63
|
+
import java.awt.Dimension;
|
64
|
+
|
53
65
|
import java.awt.Graphics;
|
54
66
|
|
55
67
|
import java.awt.Graphics2D;
|
@@ -74,7 +86,7 @@
|
|
74
86
|
|
75
87
|
public class SampleSwing extends JFrame implements ActionListener {
|
76
88
|
|
77
|
-
|
89
|
+
|
78
90
|
|
79
91
|
private JPanel buttonPanel;
|
80
92
|
|
@@ -92,7 +104,7 @@
|
|
92
104
|
|
93
105
|
public static void main(String[] args) {
|
94
106
|
|
95
|
-
SampleSwing test = new SampleSwing("Swing
|
107
|
+
SampleSwing test = new SampleSwing("SampleSwing");
|
96
108
|
|
97
109
|
|
98
110
|
|
@@ -116,11 +128,11 @@
|
|
116
128
|
|
117
129
|
|
118
130
|
|
119
|
-
label1 = new JLabel("");
|
131
|
+
label1 = new JLabel("ボタン1:青OFF");
|
120
132
|
|
121
133
|
label1.setHorizontalAlignment(JLabel.LEFT);
|
122
134
|
|
123
|
-
label2 = new JLabel("");
|
135
|
+
label2 = new JLabel("ボタン2:赤OFF");
|
124
136
|
|
125
137
|
label2.setHorizontalAlignment(JLabel.RIGHT);
|
126
138
|
|
@@ -144,17 +156,23 @@
|
|
144
156
|
|
145
157
|
JPanel p = new JPanel();
|
146
158
|
|
159
|
+
|
160
|
+
|
147
|
-
p.ad
|
161
|
+
p.setLayout(new BorderLayout());
|
148
|
-
|
149
|
-
p.add(btn2);
|
150
|
-
|
151
|
-
|
152
162
|
|
153
163
|
getContentPane().add(p, BorderLayout.CENTER);
|
154
164
|
|
165
|
+
|
166
|
+
|
167
|
+
p.add(btn1, BorderLayout.NORTH);
|
168
|
+
|
169
|
+
p.add(btn2, BorderLayout.SOUTH);
|
170
|
+
|
171
|
+
|
172
|
+
|
155
|
-
|
173
|
+
p.add(label1, BorderLayout.WEST);
|
156
|
-
|
174
|
+
|
157
|
-
|
175
|
+
p.add(label2, BorderLayout.EAST);
|
158
176
|
|
159
177
|
}
|
160
178
|
|
@@ -168,81 +186,109 @@
|
|
168
186
|
|
169
187
|
if (cmd.equals("Button 1")) {
|
170
188
|
|
189
|
+
paintFlag1 = !paintFlag1;
|
190
|
+
|
171
191
|
if (paintFlag1) {
|
172
192
|
|
173
|
-
paintFlag1 = false;
|
174
|
-
|
175
193
|
label1.setText("ボタン1:青OFF");
|
176
194
|
|
177
195
|
} else {
|
178
196
|
|
179
|
-
paintFlag1 = true;
|
180
|
-
|
181
197
|
label1.setText("ボタン1:青ON");
|
182
198
|
|
183
199
|
}
|
184
200
|
|
185
201
|
} else if (cmd.equals("Button 2")) {
|
186
202
|
|
203
|
+
paintFlag2 = !paintFlag2;
|
204
|
+
|
187
205
|
if (paintFlag2) {
|
188
206
|
|
189
207
|
label2.setText("ボタン2:赤OFF");
|
190
208
|
|
191
|
-
paintFlag2 = false;
|
192
|
-
|
193
209
|
} else {
|
194
210
|
|
195
|
-
paintFlag2 = true;
|
196
|
-
|
197
211
|
label2.setText("ボタン2:赤ON");
|
198
212
|
|
199
213
|
}
|
200
214
|
|
201
215
|
}
|
202
216
|
|
217
|
+
|
218
|
+
|
219
|
+
//paint()は自動で呼び出されるので
|
220
|
+
|
221
|
+
//別途ボタン制御OnOffのフラグを判定し
|
222
|
+
|
223
|
+
//描画させたいものを制御する
|
224
|
+
|
225
|
+
|
226
|
+
|
227
|
+
JPanel graph = new JPanel() {
|
228
|
+
|
229
|
+
@Override
|
230
|
+
|
231
|
+
public void paintComponent(Graphics g) {
|
232
|
+
|
233
|
+
|
234
|
+
|
235
|
+
super.paintComponent(g);
|
236
|
+
|
237
|
+
|
238
|
+
|
239
|
+
if (!paintFlag1 && !paintFlag2) {
|
240
|
+
|
241
|
+
super.paintComponent(g);
|
242
|
+
|
243
|
+
return;
|
244
|
+
|
245
|
+
}
|
246
|
+
|
247
|
+
|
248
|
+
|
249
|
+
Graphics2D g2 = (Graphics2D) g;
|
250
|
+
|
251
|
+
if (paintFlag1) {
|
252
|
+
|
253
|
+
g2.setColor(Color.BLUE);
|
254
|
+
|
255
|
+
}
|
256
|
+
|
257
|
+
if (paintFlag2) {
|
258
|
+
|
259
|
+
g2.setColor(Color.RED);
|
260
|
+
|
261
|
+
}
|
262
|
+
|
263
|
+
Ellipse2D ellipse = new Ellipse2D.Double(100, 100, 200, 200);
|
264
|
+
|
265
|
+
g2.draw(ellipse);
|
266
|
+
|
267
|
+
|
268
|
+
|
269
|
+
super.paintComponent(g);
|
270
|
+
|
271
|
+
|
272
|
+
|
273
|
+
}
|
274
|
+
|
275
|
+
};
|
276
|
+
|
277
|
+
|
278
|
+
|
279
|
+
graph.setPreferredSize(new Dimension(300, 300));
|
280
|
+
|
281
|
+
getContentPane().add(graph);
|
282
|
+
|
283
|
+
|
284
|
+
|
285
|
+
//これでいいのか疑問?
|
286
|
+
|
203
287
|
repaint();
|
204
288
|
|
205
289
|
}
|
206
290
|
|
207
|
-
|
208
|
-
|
209
|
-
|
291
|
+
|
210
|
-
|
211
|
-
//別途ボタン制御OnOffのフラグを判定し
|
212
|
-
|
213
|
-
//描画させたいものを制御する
|
214
|
-
|
215
|
-
public void paint(Graphics g) {
|
216
|
-
|
217
|
-
if (!paintFlag1 && !paintFlag2) {
|
218
|
-
|
219
|
-
super.paint(g);
|
220
|
-
|
221
|
-
return;
|
222
|
-
|
223
|
-
}
|
224
|
-
|
225
|
-
super.paint(g);
|
226
|
-
|
227
|
-
Graphics2D g2 = (Graphics2D) g;
|
228
|
-
|
229
|
-
if (paintFlag1) {
|
230
|
-
|
231
|
-
g2.setColor(Color.BLUE);
|
232
|
-
|
233
|
-
}
|
234
|
-
|
235
|
-
if (paintFlag2) {
|
236
|
-
|
237
|
-
g2.setColor(Color.RED);
|
238
|
-
|
239
|
-
}
|
240
|
-
|
241
|
-
Ellipse2D ellipse = new Ellipse2D.Double(100, 100, 200, 200);
|
242
|
-
|
243
|
-
g2.draw(ellipse);
|
244
|
-
|
245
|
-
}
|
246
292
|
|
247
293
|
}
|
248
294
|
|
2
画像追加
test
CHANGED
@@ -40,7 +40,7 @@
|
|
40
40
|
|
41
41
|
|
42
42
|
|
43
|
-
![イメージ説明](a
|
43
|
+
![イメージ説明](4301a6cfc4384b980fa084e00979b72b.png)
|
44
44
|
|
45
45
|
|
46
46
|
|
1
画像追加
test
CHANGED
@@ -40,6 +40,10 @@
|
|
40
40
|
|
41
41
|
|
42
42
|
|
43
|
+
![イメージ説明](abdee2ee4eb7674deebf981cfdf44ecb.png)
|
44
|
+
|
45
|
+
|
46
|
+
|
43
47
|
```JAVA
|
44
48
|
|
45
49
|
import java.awt.BorderLayout;
|