回答編集履歴

1

コード追記

2020/04/19 13:40

投稿

jimbe
jimbe

スコア12659

test CHANGED
@@ -3,3 +3,245 @@
3
3
 
4
4
 
5
5
  該当するラベルは center_show では?
6
+
7
+
8
+
9
+ #追記
10
+
11
+ 久しぶりに swing を弄ってみました.
12
+
13
+ CD ボタンを押した時の処理は, 無名クラスで設定しています.
14
+
15
+ 各ボタンの大きさはイベントを受けて修正するようにしています. (SizeUnifier クラス)
16
+
17
+ 各コンポーネントの配置は座標指定では無く Layout に任せるようにしていますので, ウインドウの大きさを変えると中央のパネルだけが拡縮します.
18
+
19
+ ```java
20
+
21
+ package teratail.q254786;
22
+
23
+
24
+
25
+ import java.awt.*;
26
+
27
+ import java.awt.event.*;
28
+
29
+ import javax.swing.*;
30
+
31
+
32
+
33
+ public class ExGUISwing_03 extends JFrame {
34
+
35
+ protected JButton[] buttons = new JButton[6];
36
+
37
+ protected JLabel center_show;
38
+
39
+
40
+
41
+ ExGUISwing_03(){
42
+
43
+ super.setTitle("ExGUISwing_03");
44
+
45
+ setDefaultCloseOperation(EXIT_ON_CLOSE); //画面を閉じた時に実行を停止する
46
+
47
+ setSize(360, 150);
48
+
49
+
50
+
51
+ //テスト用?ラベル
52
+
53
+ center_show = new JLabel("Power Off");
54
+
55
+ center_show.setFont(new Font("Arial" , Font.BOLD, 19));
56
+
57
+ center_show.setForeground(new Color(1,125,0));
58
+
59
+ center_show.setSize(100,100);
60
+
61
+
62
+
63
+ //ボタン群
64
+
65
+ buttons[0] = new JButton("PW");
66
+
67
+ buttons[1] = new JButton("AM");
68
+
69
+ buttons[2] = new JButton("FM");
70
+
71
+ buttons[3] = new JButton("CD");
72
+
73
+ buttons[3].addActionListener(new ActionListener() {
74
+
75
+ @Override
76
+
77
+ public void actionPerformed(ActionEvent e) {
78
+
79
+ center_show.setText("aaa"); // CDのボタンを押した時にパネルの表示を変える。
80
+
81
+ }
82
+
83
+ });
84
+
85
+ buttons[4] = new JButton("Up");
86
+
87
+ buttons[5] = new JButton("Down");
88
+
89
+
90
+
91
+ new SizeUnifier(buttons); //各ボタンの大きさを統一
92
+
93
+
94
+
95
+ //画面編成
96
+
97
+ Container contentPane = this.getContentPane();
98
+
99
+ contentPane.add(createCenterPanel(), BorderLayout.CENTER); //真ん中パネル
100
+
101
+ contentPane.add(createButtonPanel(0, 2), BorderLayout.WEST); //左ボタン群
102
+
103
+ contentPane.add(createButtonPanel(3, 5), BorderLayout.EAST); //右ボタン群
104
+
105
+ }
106
+
107
+ /**
108
+
109
+ * 中央パネルを生成する
110
+
111
+ */
112
+
113
+ private JPanel createCenterPanel() {
114
+
115
+ JPanel panel = new JPanel();
116
+
117
+ panel.setSize(160,120);
118
+
119
+ panel.setBorder(BorderFactory.createCompoundBorder(
120
+
121
+ BorderFactory.createEmptyBorder(5, 0, 5, 0), //top,left,botton,right
122
+
123
+ BorderFactory.createLoweredBevelBorder()
124
+
125
+ ));
126
+
127
+ panel.add(center_show);
128
+
129
+ return panel;
130
+
131
+ }
132
+
133
+ /**
134
+
135
+ * button[i](i=is~ie) のボタンを配置したパネルを生成する
136
+
137
+ */
138
+
139
+ private JPanel createButtonPanel(int is, int ie) {
140
+
141
+ JPanel panel = new JPanel(null);
142
+
143
+ panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
144
+
145
+ panel.setSize(100, 150);
146
+
147
+ panel.setPreferredSize(panel.getSize());
148
+
149
+ for(int i=is; i<=ie; i++) {
150
+
151
+ panel.add(Box.createVerticalStrut(5));
152
+
153
+ buttons[i].setAlignmentX(JComponent.CENTER_ALIGNMENT);
154
+
155
+ panel.add(buttons[i]);
156
+
157
+ panel.add(Box.createVerticalStrut(5));
158
+
159
+ }
160
+
161
+ return panel;
162
+
163
+ }
164
+
165
+
166
+
167
+ /**
168
+
169
+ * コンストラクタで指定されたコンポーネントの大きさを, 一番大きいものに統一する
170
+
171
+ */
172
+
173
+ private class SizeUnifier implements ComponentListener {
174
+
175
+ private JComponent components[];
176
+
177
+ SizeUnifier(JComponent... components) {
178
+
179
+ this.components = components;
180
+
181
+ for(JComponent c : components) c.addComponentListener(this);
182
+
183
+ }
184
+
185
+ @Override
186
+
187
+ public void componentResized(ComponentEvent e) {
188
+
189
+ int w = 0, h = 0;
190
+
191
+ for(JComponent c : components) {
192
+
193
+ Dimension size = c.getSize();
194
+
195
+ if(w < size.width) w = size.width;
196
+
197
+ if(h < size.height) h = size.height;
198
+
199
+ }
200
+
201
+ for(JComponent c : components) {
202
+
203
+ Dimension size = c.getSize();
204
+
205
+ if(w != size.width || h != size.height) {
206
+
207
+ c.setSize(w,h);
208
+
209
+ c.setMaximumSize(c.getSize());
210
+
211
+ c.revalidate();
212
+
213
+ }
214
+
215
+ }
216
+
217
+ }
218
+
219
+ @Override
220
+
221
+ public void componentMoved(ComponentEvent e) {}
222
+
223
+ @Override
224
+
225
+ public void componentShown(ComponentEvent e) {}
226
+
227
+ @Override
228
+
229
+ public void componentHidden(ComponentEvent e) {}
230
+
231
+ }
232
+
233
+
234
+
235
+ public static void main(String[] args) {
236
+
237
+ ExGUISwing_03 ini = new ExGUISwing_03();
238
+
239
+ ini.setVisible(true);
240
+
241
+ }
242
+
243
+ }
244
+
245
+ ```
246
+
247
+ ![実行イメージ](53bf8a19189598f3026092b0666f4391.png)