teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

コードバグ修正、ついでにスライダーにラベル追加

2021/10/31 11:47

投稿

jimbe
jimbe

スコア13355

answer CHANGED
@@ -29,8 +29,8 @@
29
29
  RGBSliderPanel rgbSliderPanel = new RGBSliderPanel();
30
30
  rgbSliderPanel.setChangeListener(new RGBSliderPanel.Listener() {
31
31
  @Override
32
- public void onChange(int red, int blue, int green) {
32
+ public void onChange(int red, int green, int blue) {
33
- rgbTextField.setText("red="+red+", blue="+blue+", green="+green);
33
+ rgbTextField.setText("red="+red+", green="+green+", blue="+blue);
34
34
  }
35
35
  });
36
36
 
@@ -43,54 +43,74 @@
43
43
 
44
44
  class RGBSliderPanel extends JPanel {
45
45
  interface Listener {
46
- void onChange(int red, int blue, int green);
46
+ void onChange(int red, int green, int blue);
47
47
  }
48
48
  private Listener listener;
49
- private int red, blue, green;
49
+ private int red, green, blue;
50
50
 
51
51
  RGBSliderPanel() {
52
52
  super(new GridBagLayout());
53
53
  setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
54
54
 
55
+ JLabel redLabel = new JLabel("R");
55
56
  JSlider redSlider = new JSlider(JSlider.HORIZONTAL, 0, 255, 0);
56
57
  redSlider.addChangeListener(new ChangeListener() {
57
58
  @Override
58
59
  public void stateChanged(ChangeEvent e) {
59
60
  red = ((JSlider)e.getSource()).getValue();
60
- if(listener != null) listener.onChange(red, blue, green);
61
+ if(listener != null) listener.onChange(red, green, blue);
61
62
  }
62
63
  });
63
64
 
65
+ JLabel greenLabel = new JLabel("G");
64
66
  JSlider greenSlider = new JSlider(JSlider.HORIZONTAL, 0, 255, 0);
65
67
  greenSlider.addChangeListener(new ChangeListener() {
66
68
  @Override
67
69
  public void stateChanged(ChangeEvent e) {
68
- blue = ((JSlider)e.getSource()).getValue();
70
+ green = ((JSlider)e.getSource()).getValue();
69
- if(listener != null) listener.onChange(red, blue, green);
71
+ if(listener != null) listener.onChange(red, green, blue);
70
72
  }
71
73
  });
72
74
 
75
+ JLabel blueLabel = new JLabel("B");
73
76
  JSlider blueSlider = new JSlider(JSlider.HORIZONTAL, 0, 255, 0);
74
77
  blueSlider.addChangeListener(new ChangeListener() {
75
78
  @Override
76
79
  public void stateChanged(ChangeEvent e) {
77
- green = ((JSlider)e.getSource()).getValue();
80
+ blue = ((JSlider)e.getSource()).getValue();
78
- if(listener != null) listener.onChange(red, blue, green);
81
+ if(listener != null) listener.onChange(red, green, blue);
79
82
  }
80
83
  });
81
84
 
82
85
  GridBagConstraints gbc = new GridBagConstraints();
83
86
  gbc.gridx = 0;
87
+ gbc.gridy = 0;
88
+ add(redLabel, gbc);
89
+ gbc.gridx ++;
90
+ add(Box.createHorizontalStrut(5), gbc);
91
+ gbc.gridx ++;
84
92
  add(redSlider, gbc);
93
+ gbc.gridx = 0;
94
+ gbc.gridy ++;
85
95
  add(Box.createVerticalStrut(10), gbc);
96
+ gbc.gridx = 0;
97
+ gbc.gridy ++;
98
+ add(greenLabel, gbc);
99
+ gbc.gridx = 2;
100
+ add(greenSlider, gbc);
101
+ gbc.gridx = 0;
102
+ gbc.gridy ++;
103
+ add(Box.createVerticalStrut(10), gbc);
104
+ gbc.gridx = 0;
105
+ gbc.gridy ++;
106
+ add(blueLabel, gbc);
107
+ gbc.gridx = 2;
86
108
  add(blueSlider, gbc);
87
- add(Box.createVerticalStrut(10), gbc);
88
- add(greenSlider, gbc);
89
109
  }
90
110
 
91
111
  void setChangeListener(Listener listener) {
92
112
  this.listener = listener;
93
- if(listener != null) listener.onChange(red, green, blue); //初期表示用
113
+ if(listener!= null) listener.onChange(red, green, blue); //初期表示用
94
114
  }
95
115
  }
96
116
  ```

2

コード修正

2021/10/31 11:47

投稿

jimbe
jimbe

スコア13355

answer CHANGED
@@ -90,7 +90,7 @@
90
90
 
91
91
  void setChangeListener(Listener listener) {
92
92
  this.listener = listener;
93
- listener.onChange(red, green, blue); //初期表示用
93
+ if(listener != null) listener.onChange(red, green, blue); //初期表示用
94
94
  }
95
95
  }
96
96
  ```

1

コード追加

2021/10/31 11:38

投稿

jimbe
jimbe

スコア13355

answer CHANGED
@@ -1,3 +1,96 @@
1
1
  「adding a window to a container」
2
2
  「コンテナにウィンドウを追加する」
3
- by Google翻訳
3
+ by Google翻訳
4
+
5
+ ----
6
+
7
+ スライダー3つでRGBを選ぶパネルなら、こんな感じでしょうか。
8
+ ```java
9
+ package teratail_java.q367113;
10
+
11
+ import java.awt.*;
12
+
13
+ import javax.swing.*;
14
+ import javax.swing.event.ChangeEvent;
15
+ import javax.swing.event.ChangeListener;
16
+
17
+ public class MainFrame extends JFrame {
18
+ public static void main(String[] args) {
19
+ new MainFrame().setVisible(true);
20
+ }
21
+
22
+ MainFrame() {
23
+ super();
24
+ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
25
+
26
+ JTextField rgbTextField = new JTextField();
27
+ rgbTextField.setEditable(false);
28
+
29
+ RGBSliderPanel rgbSliderPanel = new RGBSliderPanel();
30
+ rgbSliderPanel.setChangeListener(new RGBSliderPanel.Listener() {
31
+ @Override
32
+ public void onChange(int red, int blue, int green) {
33
+ rgbTextField.setText("red="+red+", blue="+blue+", green="+green);
34
+ }
35
+ });
36
+
37
+ add(rgbTextField, BorderLayout.NORTH);
38
+ add(rgbSliderPanel, BorderLayout.CENTER);
39
+
40
+ pack();
41
+ }
42
+ }
43
+
44
+ class RGBSliderPanel extends JPanel {
45
+ interface Listener {
46
+ void onChange(int red, int blue, int green);
47
+ }
48
+ private Listener listener;
49
+ private int red, blue, green;
50
+
51
+ RGBSliderPanel() {
52
+ super(new GridBagLayout());
53
+ setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
54
+
55
+ JSlider redSlider = new JSlider(JSlider.HORIZONTAL, 0, 255, 0);
56
+ redSlider.addChangeListener(new ChangeListener() {
57
+ @Override
58
+ public void stateChanged(ChangeEvent e) {
59
+ red = ((JSlider)e.getSource()).getValue();
60
+ if(listener != null) listener.onChange(red, blue, green);
61
+ }
62
+ });
63
+
64
+ JSlider greenSlider = new JSlider(JSlider.HORIZONTAL, 0, 255, 0);
65
+ greenSlider.addChangeListener(new ChangeListener() {
66
+ @Override
67
+ public void stateChanged(ChangeEvent e) {
68
+ blue = ((JSlider)e.getSource()).getValue();
69
+ if(listener != null) listener.onChange(red, blue, green);
70
+ }
71
+ });
72
+
73
+ JSlider blueSlider = new JSlider(JSlider.HORIZONTAL, 0, 255, 0);
74
+ blueSlider.addChangeListener(new ChangeListener() {
75
+ @Override
76
+ public void stateChanged(ChangeEvent e) {
77
+ green = ((JSlider)e.getSource()).getValue();
78
+ if(listener != null) listener.onChange(red, blue, green);
79
+ }
80
+ });
81
+
82
+ GridBagConstraints gbc = new GridBagConstraints();
83
+ gbc.gridx = 0;
84
+ add(redSlider, gbc);
85
+ add(Box.createVerticalStrut(10), gbc);
86
+ add(blueSlider, gbc);
87
+ add(Box.createVerticalStrut(10), gbc);
88
+ add(greenSlider, gbc);
89
+ }
90
+
91
+ void setChangeListener(Listener listener) {
92
+ this.listener = listener;
93
+ listener.onChange(red, green, blue); //初期表示用
94
+ }
95
+ }
96
+ ```