【问题标题】:Changing a JLabel's Value from a JSlider's Value从 JSlider 的值更改 JLabel 的值
【发布时间】:2009-08-06 15:25:40
【问题描述】:

我有一个 JPanel,其中包含一个 JSlider 和一个 JLabel。我想对其进行配置,以便当用户更改 JSlider 的值时,JLabel 会反映该新值。

我知道我可以使用 Slider 触发 ChangeEvents,但我不知道如何将 ChangeListener 添加到 JLabel。这是我的代码的 sn-p。

scaleSlider.addChangeListener(new ChangeListener() {
    public void stateChanged(ChangeEvent event)
    {
        int currentTime = ((JSlider)event.getSource()).getValue();
        doSomething(currentTime);
        fireStateChanged(event);
    }

JLabel timeValue = new JLabel("Time: " + scaleSlider.getValue());
timeValue.add??? 

(我现在不知道在这里做什么来反映滑块的变化)

我是否朝着正确的方向前进?提前感谢您的帮助。

【问题讨论】:

    标签: java swing jlabel jslider


    【解决方案1】:

    您不会在 JLabel 上侦听 ChangeEvents。您在 JSlider 上侦听 ChangeEvents,然后在 stateChanged() 方法中您只需使用

    label.setText("Time: " + scaleSlider.getValue());
    

    也不需要从 ChangeLisetner 触发任何事件。

    【讨论】:

    • 别忘了调用 repaint()
    【解决方案2】:

    您不需要向 JLabel 添加更改侦听器。如果您的 JLabel 是包含代码的类的成员字段,则可以在 JSlider 的更改侦听器中引用 JLabel,如下所示:

    public class Test() {
        private JLabel label;
    
        private void setup() {
            label = new JLabel();
            JSlider scaleSlider = new JSlider();
            scaleSlider.addChangeListener(new ChangeListener() {
    
                public void stateChanged(ChangeEvent event) {
                    int currentTime = ((JSlider)event.getSource()).getValue();
                    label.setText(currentTime);
                }
            }
        }
    }
    

    您可以在任何内部类中引用任何外部类的字段,甚至是您在 scaleSlider 上声明的匿名内部类 ChangeListener。

    【讨论】:

      【解决方案3】:

      您需要做的是将更改侦听器添加到滑块。

      然后在你必须实现的change方法中,改变JLabel中文本的值。

      关于你的代码,doSomething(int) 方法需要做的就是:

      label.setText(currentTime + "");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多