【问题标题】:What is wrong with my ChangeListener我的 ChangeListener 有什么问题
【发布时间】:2023-03-18 15:35:01
【问题描述】:

我在下面有一些用于 changeListener 的代码。基本上我需要将我的电压变量的值设置为我的 JSlider 当前定位的值。因此,如果我的滑块为 5,那么我的变量电压将显示为 5。但是这不会发生,我不确定为什么。缺少什么会将变量设置为我的 JSlider 所在的当前值?

public double getVoltageFromSlider() {

sliders.voltageSlider.addChangeListener(new ChangeListener() { 

 public void stateChanged(ChangeEvent event) {

                Voltage = (double) event.getSource();
                Voltage = sliders.voltageSlider.getValue();
            }
        });
        return Voltage;
    }

【问题讨论】:

  • 您的问题中没有 JavaScript。
  • stateChanged 中的第一行不会导致异常吗? event.getSource() 应该是 JSlider 实例。
  • 如需尽快获得更好的帮助,请发帖 SSCCE。每次程序询问电压时,都会添加另一个侦听器。这似乎本身就是一个错误。

标签: java swing jslider changelistener


【解决方案1】:

您的方法是向滑块添加更改侦听器,它实际上并没有检索值。您返回的值是分配给Voltage 变量的值,我假设它是您的类的一个字段。

【讨论】:

  • 我需要/需要更改哪些内容才能检索滑块上的值并将该值分配给变量电压,而不是添加一个简单的更改监听器?
【解决方案2】:

您似乎混合了两种获取电压的方法:从滑块“拉”值,并使用侦听器将值“推入”voltage 变量。

您的代码所做的,正如 Marcelo 所指出的,它在每次调用滑块时都将一个新的ChangeListener 附加到滑块,然后立即返回当前绑定到 voltage 变量的值,而无需等待侦听器实际设置值。

相反,您应该尝试以下方法之一:

  1. 或者在创建滑块时将ChangeListener 附加到滑块,并让侦听器设置voltage 变量的值。在这种情况下,不需要getVoltageFromSlider 方法。
  2. 或者根据需要使用 getter(或者只是调用sliders.voltageSlider.getValue())来检索滑块的值。在这种情况下,不需要监听器。

不过,我的建议是坚持使用侦听器,因为这样voltage 变量始终是最新的。并删除Voltage = (double) event.getSource()这一行,因为事件的来源是JSlider本身,这会导致异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-06
    • 2012-09-10
    • 2013-06-29
    • 2016-02-03
    • 2011-06-15
    • 2014-11-04
    • 2011-12-29
    • 2015-10-15
    相关资源
    最近更新 更多