2

根据本教程,应该执行以下操作来自定义 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)。错误如下:

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

我在 Internet 上找到的所有示例都告诉我这样做。

所以有什么问题?

编辑:

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

4

3 回答 3

5

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

  • 你没有使用 java.util.Hashtable

  • 你没有使用 javax.swing.JSlider

我认为第一个是你的问题只是检查它。

于 2011-06-15T20:17:50.740 回答
3

我不是很确定,但它可能会简单地替换HashtableDictionary,这显然是该方法想要的。

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);
于 2011-06-15T20:04:47.823 回答
1

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

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

代替 :

import java.util.Hashtable;
于 2011-06-15T20:14:25.447 回答