如何将changeHandler()添加到我的程序中

时间:2012-03-31 15:19:37

标签: java swing event-handling jslider changelistener

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

3 个答案:

答案 0 :(得分:3)

你的ChangeHandler是什么?您还没有发布该代码

以下是使用更改侦听器的示例


JSlider s = new JSlider();
s.addChangeListener(new ChangeListener() {
   public void stateChanged(ChangeEvent e) {
      System.out.println("Changed: " + e);
   }
});

答案 1 :(得分:2)

ChangeHandler的实施情况如何?你真的不需要一个单独的文件,ChangeListener接口只有一个方法,所以你可以快速提供一个实现,同时声明它是内联的

pickNum.addChangeListener(new ChangeListener() {    
    @Override
    public void stateChanged(ChangeEvent arg0) {
        JSlider s = (JSlider) arg0.getSource();
        index = s.getValue();   
    }
});

答案 2 :(得分:2)

你在谈论的ChangeHandler课程是什么?它不是JDK的一部分。您是否将GWT的ChangeHandler类与JDK的ChangeListener混淆了?

此外,我建议您查看使用滑块的示例代码Swing slider。例如,附加到滑块

的这种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()来电