回答編集履歴
5
画像追加
answer
CHANGED
@@ -25,7 +25,7 @@
|
|
25
25
|
各ボタンをOnOfし青と赤の円を描画し両方offで表示無し
|
26
26
|
青と赤両方Onなら赤だけ表示
|
27
27
|
|
28
|
-

|
29
29
|
|
30
30
|
```JAVA
|
31
31
|
package sample;
|
4
間違いの修正
answer
CHANGED
@@ -1,14 +1,16 @@
|
|
1
|
-
※動作確認調査中※
|
2
|
-
図形描画されなくなっています
|
3
|
-
---
|
4
|
-
|
5
1
|
ボタンを押す毎に再描画することが出来たので参考になればと思います。
|
6
2
|
大まかな動きの流れなどの確認は出来るはずです。
|
7
3
|
|
4
|
+
追記:
|
5
|
+
[@umyu](https://teratail.com/users/umyu#reply)さんのご協力ご指導の元無事完成しました。
|
6
|
+
GUI初実装でしたのでとても勉強になりました。ありがとうございました。
|
7
|
+
|
8
8
|
ポイントは
|
9
9
|
・**ActionListener**インターフェースを使ってボタンがクリックされた場合のイベントを利用する
|
10
10
|
・ボタンがクリックされた状態をフラグを使って**ボタン制御**OnOffする
|
11
|
+
・paint()は使わずに**paintComponent()を@Override**して利用する
|
12
|
+
|
11
|
-
・**
|
13
|
+
・描画用パネルgraphなどを作り**paintComponent()**内で**ボタン制御**OnOffを判定し再描画させたいものを制御する
|
12
14
|
・再描画はrepaint()で行う
|
13
15
|
|
14
16
|
[ActionListenerインターフェース](https://www.javadrive.jp/tutorial/event/index2.html)
|
@@ -26,10 +28,10 @@
|
|
26
28
|

|
27
29
|
|
28
30
|
```JAVA
|
31
|
+
package sample;
|
29
32
|
|
30
33
|
import java.awt.BorderLayout;
|
31
34
|
import java.awt.Color;
|
32
|
-
import java.awt.Dimension;
|
33
35
|
import java.awt.Graphics;
|
34
36
|
import java.awt.Graphics2D;
|
35
37
|
import java.awt.event.ActionEvent;
|
@@ -40,6 +42,7 @@
|
|
40
42
|
import javax.swing.JFrame;
|
41
43
|
import javax.swing.JLabel;
|
42
44
|
import javax.swing.JPanel;
|
45
|
+
import javax.swing.border.LineBorder;
|
43
46
|
|
44
47
|
public class SampleSwing extends JFrame implements ActionListener {
|
45
48
|
|
@@ -76,6 +79,38 @@
|
|
76
79
|
btn2.addActionListener(this);
|
77
80
|
btn2.setActionCommand("Button 2");
|
78
81
|
|
82
|
+
//paintComponent()は自動で呼び出されるので
|
83
|
+
//別途ボタン制御OnOffのフラグを判定し
|
84
|
+
//描画させたいものを制御する
|
85
|
+
|
86
|
+
//paint()は使わずに
|
87
|
+
//paintComponent()を@Overrideして利用する
|
88
|
+
|
89
|
+
JPanel graph = new JPanel() {
|
90
|
+
@Override
|
91
|
+
public void paintComponent(Graphics g) {
|
92
|
+
|
93
|
+
super.paintComponent(g);
|
94
|
+
|
95
|
+
if (!paintFlag1 && !paintFlag2) {
|
96
|
+
return;
|
97
|
+
}
|
98
|
+
|
99
|
+
Graphics2D g2 = (Graphics2D) g;
|
100
|
+
if (paintFlag1) {
|
101
|
+
g2.setColor(Color.BLUE);
|
102
|
+
}
|
103
|
+
if (paintFlag2) {
|
104
|
+
g2.setColor(Color.RED);
|
105
|
+
}
|
106
|
+
Ellipse2D ellipse = new Ellipse2D.Double(0, 70, 150, 150);
|
107
|
+
g2.draw(ellipse);
|
108
|
+
}
|
109
|
+
};
|
110
|
+
|
111
|
+
// JPanelのボーダー色を設定(可視化用)
|
112
|
+
graph.setBorder(new LineBorder(Color.CYAN));
|
113
|
+
|
79
114
|
JPanel p = new JPanel();
|
80
115
|
|
81
116
|
p.setLayout(new BorderLayout());
|
@@ -84,65 +119,34 @@
|
|
84
119
|
p.add(btn1, BorderLayout.NORTH);
|
85
120
|
p.add(btn2, BorderLayout.SOUTH);
|
86
121
|
|
122
|
+
//図形描画
|
123
|
+
p.add(graph, BorderLayout.CENTER);
|
124
|
+
|
87
125
|
p.add(label1, BorderLayout.WEST);
|
88
126
|
p.add(label2, BorderLayout.EAST);
|
89
127
|
}
|
90
128
|
|
91
129
|
//ボタン制御OnOff
|
130
|
+
@Override
|
92
131
|
public void actionPerformed(ActionEvent e) {
|
93
132
|
String cmd = e.getActionCommand();
|
94
133
|
if (cmd.equals("Button 1")) {
|
95
134
|
paintFlag1 = !paintFlag1;
|
96
135
|
if (paintFlag1) {
|
136
|
+
label1.setText("ボタン1:青ON");
|
137
|
+
} else {
|
97
138
|
label1.setText("ボタン1:青OFF");
|
98
|
-
} else {
|
99
|
-
label1.setText("ボタン1:青ON");
|
100
139
|
}
|
101
140
|
} else if (cmd.equals("Button 2")) {
|
102
141
|
paintFlag2 = !paintFlag2;
|
103
142
|
if (paintFlag2) {
|
143
|
+
label2.setText("ボタン2:赤ON");
|
144
|
+
} else {
|
104
145
|
label2.setText("ボタン2:赤OFF");
|
105
|
-
} else {
|
106
|
-
label2.setText("ボタン2:赤ON");
|
107
146
|
}
|
108
147
|
}
|
109
|
-
|
110
|
-
//paint()は自動で呼び出されるので
|
111
|
-
//別途ボタン制御OnOffのフラグを判定し
|
112
|
-
//描画させたいものを制御する
|
113
|
-
|
114
|
-
JPanel graph = new JPanel() {
|
115
|
-
@Override
|
116
|
-
public void paintComponent(Graphics g) {
|
117
|
-
|
118
|
-
super.paintComponent(g);
|
119
|
-
|
120
|
-
if (!paintFlag1 && !paintFlag2) {
|
121
|
-
super.paintComponent(g);
|
122
|
-
return;
|
123
|
-
}
|
124
|
-
|
125
|
-
Graphics2D g2 = (Graphics2D) g;
|
126
|
-
if (paintFlag1) {
|
127
|
-
g2.setColor(Color.BLUE);
|
128
|
-
}
|
129
|
-
if (paintFlag2) {
|
130
|
-
g2.setColor(Color.RED);
|
131
|
-
}
|
132
|
-
Ellipse2D ellipse = new Ellipse2D.Double(100, 100, 200, 200);
|
133
|
-
g2.draw(ellipse);
|
134
|
-
|
135
|
-
super.paintComponent(g);
|
136
|
-
|
137
|
-
}
|
138
|
-
};
|
139
|
-
|
140
|
-
graph.setPreferredSize(new Dimension(300, 300));
|
141
|
-
getContentPane().add(graph);
|
142
|
-
|
143
|
-
//
|
148
|
+
//再描画
|
144
149
|
repaint();
|
145
150
|
}
|
146
|
-
|
147
151
|
}
|
148
152
|
```
|
3
間違いの修正
answer
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
※動作確認調査中※
|
2
|
+
図形描画されなくなっています
|
3
|
+
---
|
4
|
+
|
1
5
|
ボタンを押す毎に再描画することが出来たので参考になればと思います。
|
2
6
|
大まかな動きの流れなどの確認は出来るはずです。
|
3
7
|
|
@@ -22,8 +26,10 @@
|
|
22
26
|

|
23
27
|
|
24
28
|
```JAVA
|
29
|
+
|
25
30
|
import java.awt.BorderLayout;
|
26
31
|
import java.awt.Color;
|
32
|
+
import java.awt.Dimension;
|
27
33
|
import java.awt.Graphics;
|
28
34
|
import java.awt.Graphics2D;
|
29
35
|
import java.awt.event.ActionEvent;
|
@@ -36,7 +42,7 @@
|
|
36
42
|
import javax.swing.JPanel;
|
37
43
|
|
38
44
|
public class SampleSwing extends JFrame implements ActionListener {
|
39
|
-
|
45
|
+
|
40
46
|
private JPanel buttonPanel;
|
41
47
|
private JLabel label1;
|
42
48
|
private JLabel label2;
|
@@ -45,7 +51,7 @@
|
|
45
51
|
private boolean paintFlag2 = false;
|
46
52
|
|
47
53
|
public static void main(String[] args) {
|
48
|
-
SampleSwing test = new SampleSwing("
|
54
|
+
SampleSwing test = new SampleSwing("SampleSwing");
|
49
55
|
|
50
56
|
test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
51
57
|
test.setVisible(true);
|
@@ -57,9 +63,9 @@
|
|
57
63
|
|
58
64
|
setSize(400, 400);
|
59
65
|
|
60
|
-
label1 = new JLabel("");
|
66
|
+
label1 = new JLabel("ボタン1:青OFF");
|
61
67
|
label1.setHorizontalAlignment(JLabel.LEFT);
|
62
|
-
label2 = new JLabel("");
|
68
|
+
label2 = new JLabel("ボタン2:赤OFF");
|
63
69
|
label2.setHorizontalAlignment(JLabel.RIGHT);
|
64
70
|
|
65
71
|
JButton btn1 = new JButton("Button 1");
|
@@ -71,55 +77,72 @@
|
|
71
77
|
btn2.setActionCommand("Button 2");
|
72
78
|
|
73
79
|
JPanel p = new JPanel();
|
74
|
-
p.add(btn1);
|
75
|
-
p.add(btn2);
|
76
80
|
|
81
|
+
p.setLayout(new BorderLayout());
|
77
82
|
getContentPane().add(p, BorderLayout.CENTER);
|
83
|
+
|
84
|
+
p.add(btn1, BorderLayout.NORTH);
|
85
|
+
p.add(btn2, BorderLayout.SOUTH);
|
86
|
+
|
78
|
-
|
87
|
+
p.add(label1, BorderLayout.WEST);
|
79
|
-
|
88
|
+
p.add(label2, BorderLayout.EAST);
|
80
89
|
}
|
81
90
|
|
82
91
|
//ボタン制御OnOff
|
83
92
|
public void actionPerformed(ActionEvent e) {
|
84
93
|
String cmd = e.getActionCommand();
|
85
94
|
if (cmd.equals("Button 1")) {
|
95
|
+
paintFlag1 = !paintFlag1;
|
86
96
|
if (paintFlag1) {
|
87
|
-
paintFlag1 = false;
|
88
97
|
label1.setText("ボタン1:青OFF");
|
89
98
|
} else {
|
90
|
-
paintFlag1 = true;
|
91
99
|
label1.setText("ボタン1:青ON");
|
92
100
|
}
|
93
101
|
} else if (cmd.equals("Button 2")) {
|
102
|
+
paintFlag2 = !paintFlag2;
|
94
103
|
if (paintFlag2) {
|
95
104
|
label2.setText("ボタン2:赤OFF");
|
96
|
-
paintFlag2 = false;
|
97
105
|
} else {
|
98
|
-
paintFlag2 = true;
|
99
106
|
label2.setText("ボタン2:赤ON");
|
100
107
|
}
|
101
108
|
}
|
109
|
+
|
110
|
+
//paint()は自動で呼び出されるので
|
111
|
+
//別途ボタン制御OnOffのフラグを判定し
|
112
|
+
//描画させたいものを制御する
|
113
|
+
|
114
|
+
JPanel graph = new JPanel() {
|
115
|
+
@Override
|
116
|
+
public void paintComponent(Graphics g) {
|
117
|
+
|
118
|
+
super.paintComponent(g);
|
119
|
+
|
120
|
+
if (!paintFlag1 && !paintFlag2) {
|
121
|
+
super.paintComponent(g);
|
122
|
+
return;
|
123
|
+
}
|
124
|
+
|
125
|
+
Graphics2D g2 = (Graphics2D) g;
|
126
|
+
if (paintFlag1) {
|
127
|
+
g2.setColor(Color.BLUE);
|
128
|
+
}
|
129
|
+
if (paintFlag2) {
|
130
|
+
g2.setColor(Color.RED);
|
131
|
+
}
|
132
|
+
Ellipse2D ellipse = new Ellipse2D.Double(100, 100, 200, 200);
|
133
|
+
g2.draw(ellipse);
|
134
|
+
|
135
|
+
super.paintComponent(g);
|
136
|
+
|
137
|
+
}
|
138
|
+
};
|
139
|
+
|
140
|
+
graph.setPreferredSize(new Dimension(300, 300));
|
141
|
+
getContentPane().add(graph);
|
142
|
+
|
143
|
+
//これでいいのか疑問?
|
102
144
|
repaint();
|
103
145
|
}
|
104
|
-
|
105
|
-
|
146
|
+
|
106
|
-
//別途ボタン制御OnOffのフラグを判定し
|
107
|
-
//描画させたいものを制御する
|
108
|
-
public void paint(Graphics g) {
|
109
|
-
if (!paintFlag1 && !paintFlag2) {
|
110
|
-
super.paint(g);
|
111
|
-
return;
|
112
|
-
}
|
113
|
-
super.paint(g);
|
114
|
-
Graphics2D g2 = (Graphics2D) g;
|
115
|
-
if (paintFlag1) {
|
116
|
-
g2.setColor(Color.BLUE);
|
117
|
-
}
|
118
|
-
if (paintFlag2) {
|
119
|
-
g2.setColor(Color.RED);
|
120
|
-
}
|
121
|
-
Ellipse2D ellipse = new Ellipse2D.Double(100, 100, 200, 200);
|
122
|
-
g2.draw(ellipse);
|
123
|
-
}
|
124
147
|
}
|
125
148
|
```
|
2
画像追加
answer
CHANGED
@@ -19,7 +19,7 @@
|
|
19
19
|
各ボタンをOnOfし青と赤の円を描画し両方offで表示無し
|
20
20
|
青と赤両方Onなら赤だけ表示
|
21
21
|
|
22
|
-

|
23
23
|
|
24
24
|
```JAVA
|
25
25
|
import java.awt.BorderLayout;
|
1
画像追加
answer
CHANGED
@@ -19,6 +19,8 @@
|
|
19
19
|
各ボタンをOnOfし青と赤の円を描画し両方offで表示無し
|
20
20
|
青と赤両方Onなら赤だけ表示
|
21
21
|
|
22
|
+

|
23
|
+
|
22
24
|
```JAVA
|
23
25
|
import java.awt.BorderLayout;
|
24
26
|
import java.awt.Color;
|