回答編集履歴

5

画像追加

2018/08/18 09:42

投稿

opyon
opyon

スコア1009

test CHANGED
@@ -52,7 +52,7 @@
52
52
 
53
53
 
54
54
 
55
- ![イメージ説明](4301a6cfc4384b980fa084e00979b72b.png)
55
+ ![イメージ説明](e3f8a20ab807a8887d096257c0b74634.png)
56
56
 
57
57
 
58
58
 

4

間違いの修正

2018/08/18 09:42

投稿

opyon
opyon

スコア1009

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()メソッド**内で**ボタン制御**OnOffを判定し再描画させたいものを制御する
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
- label1.setText("ボタン1ON");
289
+ label2.setText("ボタン2OFF");
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

間違いの修正

2018/08/18 09:35

投稿

opyon
opyon

スコア1009

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("SwingTest");
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.add(btn1);
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
- getContentPane().add(label1, BorderLayout.PAGE_START);
173
+ p.add(label1, BorderLayout.WEST);
156
-
174
+
157
- getContentPane().add(label2, BorderLayout.PAGE_END);
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
- //paint()は自動で呼び出されるので
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

画像追加

2018/08/18 08:32

投稿

opyon
opyon

スコア1009

test CHANGED
@@ -40,7 +40,7 @@
40
40
 
41
41
 
42
42
 
43
- ![イメージ説明](abdee2ee4eb7674deebf981cfdf44ecb.png)
43
+ ![イメージ説明](4301a6cfc4384b980fa084e00979b72b.png)
44
44
 
45
45
 
46
46
 

1

画像追加

2018/08/17 16:26

投稿

opyon
opyon

スコア1009

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;