根据这个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)
我通过互联网找到的所有例子都告诉我这样做。
那么,问题是什么?
编辑:
我的问题是错的。这只是一个包含错误。看看我的答案。
答案 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;