我是否可以添加更改侦听器并在创建新的JSlider时定义它?
我需要创建和添加JSliders的顺序意味着我不能事先定义它们,所以我事先没有办法存储它们。
基本上:我没有命名JSliders,但需要一种方法来识别哪一个已被改变。
如果不太清楚我在质疑什么
,那么稍后会添加一些示例代码编辑:
具体来说,假设我有一个JSlider来表示最小值,而一个JSlider来表示最大值。我需要使用它来表示一系列数字,比如客户ID,稍后会显示。
答案 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
}
});