0

拜托,我试图添加一个 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]
4

3 回答 3

3

你的 ChangeHandler 是什么?您尚未发布该代码

这是使用更改侦听器的示例


JSlider s = new JSlider();
s.addChangeListener(new ChangeListener() {
   public void stateChanged(ChangeEvent e) {
      System.out.println("Changed: " + e);
   }
});
于 2012-03-31T15:30:56.870 回答
2

你的执行是ChangeHandler什么?你真的不需要一个单独的文件,ChangeListener 接口只有一个方法,所以你可以在声明它内联的同时快速提供一个实现

pickNum.addChangeListener(new ChangeListener() {    
    @Override
    public void stateChanged(ChangeEvent arg0) {
        JSlider s = (JSlider) arg0.getSource();
        index = s.getValue();   
    }
});
于 2012-03-31T15:29:03.477 回答
2

你在说什么ChangeHandler课?它不是 JDK 的一部分。您是否将ChangeHandlerGWT 中的类与ChangeListenerJDK 中的类混淆了?

此外,我建议您查看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()您在代码段中错过的调用

于 2012-03-31T15:33:59.030 回答