多个JSliders - 识别变化

时间:2013-03-20 00:39:39

标签: java swing events jslider changelistener

我是否可以添加更改侦听器并在创建新的JSlider时定义它?

我需要创建和添加JSliders的顺序意味着我不能事先定义它们,所以我事先没有办法存储它们。

基本上:我没有命名JSliders,但需要一种方法来识别哪一个已被改变。

如果不太清楚我在质疑什么

,那么稍后会添加一些示例代码

编辑:

具体来说,假设我有一个JSlider来表示最小值,而一个JSlider来表示最大值。我需要使用它来表示一系列数字,比如客户ID,稍后会显示。

1 个答案:

答案 0 :(得分:3)

如果滑块定义超出范围(即事件监听器无法引用变量),则可以为滑块提供“名称”,您可以查找并比较

JSlider slider = new JSlider();
slider.setName("funky");

//...//

public void stateChanged(ChangeEvent e) {
    Object source = e.getSource();
    if (source instanceof JSlider) {
        JSlider slider = (JSlider)source;
        String name = slider.getName();
        if ("funky".equals(name)) {
            // Do funky stuff
        }
    }
}

但是,如果您将JSlider定义为类级别字段,则可以将事件源的引用与定义的滑块进行比较...

private JSlider slider;

//...//

slider = new JSlider();
slider.setName("funky");

//...//

public void stateChanged(ChangeEvent e) {
    if (slider == e.getSource()) {
        // Do funky stuff
    }
}

实际上,如果可以,你应该给每个滑块它自己的监听器并直接从源处理它......

JSlider slider = new JSlider();
slider.addChangeListener(new ChangeListener() {
    public void stateChanged(ChangeEvent e) {
        JSlider slider= (Slider)e.getSource();
        // Do funky stuff
    }
});