【问题标题】:Multiple JSliders - identifying changes多个 JSlider - 识别更改
【发布时间】:2013-03-20 00:39:38
【问题描述】:

我能否添加一个更改监听器并在创建新的 JSlider 时对其进行定义?

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

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

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

编辑:

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

【问题讨论】:

标签: java swing events jslider changelistener


【解决方案1】:

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

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

【讨论】:

  • 是的,我相信最后一个建议正是我想要的。能够为每个滑块提供它自己的侦听器应该比我尝试修复的方法更好。明天我会在我实现这个后回复我的成功
  • +1 用于单独的侦听器,这可能会使保存max > min 更容易。还可以考虑range slider
猜你喜欢
  • 2021-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多