setLabelTable方法的问题是自定义JSlider标签

时间:2011-06-15 19:50:27

标签: java swing jslider

根据这个tutorial,应该做以下事情来自定义JSlider的标签:

JSlider framesPerSecond = new JSlider(JSlider.VERTICAL,
                                      FPS_MIN, FPS_MAX, FPS_INIT);
framesPerSecond.addChangeListener(this);
framesPerSecond.setMajorTickSpacing(10);
framesPerSecond.setPaintTicks(true);

//Create the label table
Hashtable labelTable = new Hashtable();
labelTable.put( new Integer( 0 ), new JLabel("Stop") );
labelTable.put( new Integer( FPS_MAX/10 ), new JLabel("Slow") );
labelTable.put( new Integer( FPS_MAX ), new JLabel("Fast") );
framesPerSecond.setLabelTable( labelTable ); //ERROR

framesPerSecond.setPaintLabels(true);

实际上Eclipse抱怨setLabelTable想要的是Dictionary而不是HashTable(我正在使用sun sdk 1.6.0_25)。错误如下:

  

方法setLabelTable(Dictionary)   在JSlider类型中不适用   对于参数(Hashtable)

我通过互联网找到的所有例子都告诉我这样做。

那么,问题是什么?

编辑:

我的问题是错的。这只是一个包含错误。看看我的答案。

3 个答案:

答案 0 :(得分:5)

正如我刚评论的那样,Dictionary是HashTable的超级类,你可以把HashTable设置为setLabelTabel,但是如果eclipse显示这个错误,我们可以考虑两种情况:

  • 您没有使用java.util.Hashtable

  • 您没有使用javax.swing.JSlider

我认为第一个问题就是你的问题。

答案 1 :(得分:3)

我不是很确定,但可能只需将Hashtable替换为Dictionary,这显然是该方法所需要的。

Dictionary labelTable = new Dictionary();
labelTable.put(new Integer(0), new JLabel("Stop"));
labelTable.put(new Integer(FPS_MAX / 10), new JLabel("Slow"));
labelTable.put(new Integer(FPS_MAX), new JLabel("Fast"));
framesPerSecond.setLabelTabel(labelTable);

答案 2 :(得分:1)

哦..感谢@Ninto和@Sorceror。你是对的。 这是一个包含错误:

import com.sun.org.apache.xalan.internal.xsltc.runtime.Hashtable;

而不是:

import java.util.Hashtable;