0

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

我需要创建和添加 JSlider 的顺序意味着我无法预先定义它们,所以我真的没有办法预先存储它们。

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

如果不太清楚我在问什么,稍后将添加一些示例代码

编辑:

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

4

1 回答 1

4

如果您的滑块定义超出范围(即事件侦听器无法引用变量),那么您可以为滑块提供一个“名称”,您可以查找和比较

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
    }
});
于 2013-03-20T01:31:38.693 回答