11
11
import java .util .concurrent .atomic .AtomicInteger ;
12
12
import java .util .logging .Logger ;
13
13
import javax .swing .*;
14
+ import javax .swing .event .ChangeEvent ;
15
+ import javax .swing .event .ChangeListener ;
14
16
15
17
public final class MainPanel extends JPanel {
16
18
private MainPanel () {
17
19
super (new BorderLayout (5 , 5 ));
18
20
JSlider slider1 = makeSlider ();
19
- setCurrentLabelListener ( slider1 );
21
+ slider1 . getModel (). addChangeListener ( new SliderLabelChangeListener ( slider1 ) );
20
22
21
23
// @SuppressWarnings("JdkObsolete")
22
24
// Dictionary<Integer, Component> labelTable = new Hashtable<>();
@@ -26,7 +28,7 @@ private MainPanel() {
26
28
// .forEach(i -> labelTable.put(i, list.get(i)));
27
29
List <String > list2 = Arrays .asList ("A" , "B" , "C" , "D" , "E" );
28
30
JSlider slider2 = new JSlider (0 , list2 .size () - 1 , 0 );
29
- setCurrentLabelListener ( slider2 );
31
+ slider2 . getModel (). addChangeListener ( new SliderLabelChangeListener ( slider2 ) );
30
32
// slider2.setLabelTable(labelTable);
31
33
slider2 .setSnapToTicks (true );
32
34
slider2 .setPaintTicks (true );
@@ -76,31 +78,6 @@ private static JSlider makeSlider() {
76
78
return slider ;
77
79
}
78
80
79
- private static void setCurrentLabelListener (JSlider slider ) {
80
- AtomicInteger prev = new AtomicInteger (-1 );
81
- slider .getModel ().addChangeListener (e -> {
82
- BoundedRangeModel m = (BoundedRangeModel ) e .getSource ();
83
- int i = m .getValue ();
84
- int mts = slider .getMajorTickSpacing ();
85
- if ((mts == 0 || i % mts == 0 ) && i != prev .get ()) {
86
- Object labelTable = slider .getLabelTable ();
87
- if (labelTable instanceof Map ) {
88
- Map <?, ?> map = (Map <?, ?>) labelTable ;
89
- resetForeground (map .get (i ), Color .RED );
90
- resetForeground (map .get (prev .get ()), Color .BLACK );
91
- }
92
- slider .repaint ();
93
- prev .set (i );
94
- }
95
- });
96
- }
97
-
98
- private static void resetForeground (Object o , Color c ) {
99
- if (o instanceof Component ) {
100
- ((Component ) o ).setForeground (c );
101
- }
102
- }
103
-
104
81
private static Component makeTitledPanel (String title , Component c ) {
105
82
JPanel p = new JPanel (new BorderLayout ());
106
83
p .setBorder (BorderFactory .createTitledBorder (title ));
@@ -129,3 +106,34 @@ private static void createAndShowGui() {
129
106
frame .setVisible (true );
130
107
}
131
108
}
109
+
110
+ class SliderLabelChangeListener implements ChangeListener {
111
+ private final AtomicInteger prev = new AtomicInteger (-1 );
112
+ private final JSlider slider ;
113
+
114
+ protected SliderLabelChangeListener (JSlider slider ) {
115
+ this .slider = slider ;
116
+ }
117
+
118
+ @ Override public void stateChanged (ChangeEvent e ) {
119
+ BoundedRangeModel m = (BoundedRangeModel ) e .getSource ();
120
+ int i = m .getValue ();
121
+ int mts = slider .getMajorTickSpacing ();
122
+ if ((mts == 0 || i % mts == 0 ) && i != prev .get ()) {
123
+ Object labelTable = slider .getLabelTable ();
124
+ if (labelTable instanceof Map ) {
125
+ Map <?, ?> map = (Map <?, ?>) labelTable ;
126
+ resetForeground (map .get (i ), Color .RED );
127
+ resetForeground (map .get (prev .get ()), Color .BLACK );
128
+ }
129
+ slider .repaint ();
130
+ prev .set (i );
131
+ }
132
+ }
133
+
134
+ private static void resetForeground (Object o , Color c ) {
135
+ if (o instanceof Component ) {
136
+ ((Component ) o ).setForeground (c );
137
+ }
138
+ }
139
+ }
0 commit comments