请注意,我试图添加一个changeHandler事件,但我认为我做得不对。我正在看以下陈述。。
pickNum.addChangeListener(new ChangeHandler());
@Override
public void stateChanged(changeEvent e)
{
JSlider s = (JSlider)e.getSource();
index = s.getValue();
}
有什么我本可以做得更好的吗?因为,它不起作用。。
import javax.swing.*;
public class Slider extends JFrame{
public static int index;
JSlider pickNum = new JSlider(JSlider.HORIZONTAL,0,30,5);
public Slider()
{
super("Slider");
this.pack();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pickNum.setMajorTickSpacing(10);
pickNum.setMinorTickSpacing(1);
pickNum.setPaintTicks(true);
pickNum.setPaintLabels(true);
pickNum.addChangeListener(new ChangeHandler());
@Override
public void stateChanged(changeEvent e)
{
JSlider s = (JSlider)e.getSource();
index = s.getValue();
}
getPointedValue();
this.add(pickNum);
this.setVisible(true);
}
public final int getPointedValue()
{
int value;
value = pickNum.getValue();
return value;
}
public static void main(String[] args) {
Slider frame = new Slider();
System.out.println("value is :"+Slider.index);
}
}
[/CODE]
您的ChangeHandler是什么?你还没有发布代码
以下是使用更改侦听器的示例
JSlider s = new JSlider();
s.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
System.out.println("Changed: " + e);
}
});
ChangeHandler
的实现是什么?您实际上并不需要单独的文件,ChangeListener接口只有一个方法,因此您可以在内联中声明它的同时快速提供实现
pickNum.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent arg0) {
JSlider s = (JSlider) arg0.getSource();
index = s.getValue();
}
});
您所说的ChangeHandler
类是什么?它不是JDK的一部分。您是否混淆了GWT中的ChangeHandler
类和JDK中的ChangeListener
?
此外,我建议您查看Swing滑块,了解使用滑块的示例代码。例如,连接到滑块的ChangeListener
的一个很好的示例实现
public void stateChanged(ChangeEvent e) {
JSlider source = (JSlider)e.getSource();
if (!source.getValueIsAdjusting()) {
int fps = (int)source.getValue();
if (fps == 0) {
if (!frozen) stopAnimation();
} else {
delay = 1000 / fps;
timer.setDelay(delay);
timer.setInitialDelay(delay * 10);
if (frozen) startAnimation();
}
}
}
注意您在代码片段中错过的getValueIsAdjusting()
调用