2013-03-20 43 views
0

我能够添加一个更改侦听器并在创建新的JSlider时对其进行定义吗?多个JSliders - 识别变化

我需要创建和添加JSliders的顺序意味着我无法事先定义它们,所以我没有真正的方法来事先存储它们。

本质上:我没有命名JSliders,但需要一种方法来确定哪一个已被修改。

将增加这跟一些示例代码后,如果它不是太清楚,我质疑有关

编辑:

具体来说,假设我有一个JSlider的代表最小值和一个JSlider的到代表最大值。我需要用它来表示一系列数字,可以说客户ID,稍后会显示。

+0

[的getSource()](http://docs.oracle.com/javase/6/docs/api/java/util/EventObject.html#getSource())应该帮助说明。 – 2013-03-20 00:46:57

回答

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 
    } 
} 

,如果可以的话,你应该让每一个滑块是自己的听众并直接处理它M中的源...

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

是的,我相信这最后的建议正是我所期待的。能够给每个滑块这样的自己的监听器应该可能比我试图做的修复更好。我将在明天完成这个 – user1079404 2013-03-20 01:41:44

+1

+1后回复我的成功,以便让单独的听众可以更轻松地保留'max> min'。还要考虑[范围滑块](http://ernienotes.wordpress.com/2010/12/27/creating-a-java-swing-range-slider/)。 – trashgod 2013-03-20 01:58:21