I have a JSlider with a min of 0 and a max of 10,000. I have the major tick marks set at 1,000. If I were to paint the labels now they would show up as 0, 1000, 2000, 3000, 4000, etc. What I would like to be shown would be 0, 1, 2, 3, 4, 5, etc. What would be a good way to accomplish this task?
+1
A:
You could use JSlider.setLabelTable(Dictionary)
to set specific labels for the values you wish to render differently; e.g.
JSlider slider = ...
Dictionary dict = new Hashtable();
for (int i=0; i<=10000; i += 1000) {
dict.put(i, new JLabel(Integer.toString(i / 1000)));
}
slider.setLabelTable(dict);
(Edited based on previous comments.)
Adamski
2009-07-14 14:12:42
Dictionary is an abstract class, so you might want to use Hashtable instead. You also need to get the number 10 in there. your for loop doesnt allow for that.
akf
2009-07-14 14:24:27
Dictionary is abstract and cannot be instantied
dfa
2009-07-14 14:24:41
Both good points! - I'll edit my code.
Adamski
2009-07-14 14:32:27
rebuilding the label from scratch maybe a bad idea (using Java6 on windows the labels are broken)
dfa
2009-07-14 14:44:31
Adamski
2009-07-14 14:47:11
check my answer (I'm on windows 7 with jdk 1.6u14)
dfa
2009-07-14 15:00:13
+2
A:
using JSlider.setLabelTable(Dictionary)
EDIT
Alternatively you can rely on predefined label UI and just change the label text:
Enumeration e = jSlider.getLabelTable().keys();
while (e.hasMoreElements()) {
Integer i = (Integer) e.nextElement();
JLabel label = (JLabel) jSlider.getLabelTable().get(i);
label.setText(String.valueOf(i / 1000));
}
dfa
2009-07-14 14:15:41