如何使用Java使两个GUI滑块彼此独立工作?

时间:2017-05-03 21:31:06

标签: java swing

以下是我在下面编写的代码:

package ASG2;

import javax.swing.*;
import java.awt.*;
import javax.swing.event.*;

public class GUI extends JFrame
{
    JSlider slider;
    JLabel label;

    public GUI()
    {
        setLayout(new FlowLayout());
        slider = new JSlider(JSlider.HORIZONTAL, 0, 5, 0);
        slider.setMajorTickSpacing(1);
        slider.setPaintTicks(true);
        add(slider);

        label = new JLabel("Current value: 0");
        add(label);

        event b = new event();
        slider.addChangeListener(b);

        setLayout(new FlowLayout());
        slider = new JSlider(JSlider.HORIZONTAL, 0, 5, 0);
        slider.setMajorTickSpacing(1);
        slider.setPaintTicks(true);
        add(slider);

        label = new JLabel("Current value: 0");
        add(label);

        event c = new event();
        slider.addChangeListener(c);
    }

    public class event implements ChangeListener
    {
        public void stateChanged(ChangeEvent a)
        {
            int value = slider.getValue();

            label.setText("Current value: " + value);
        }
    }

    public static void main(String args[])
    {
        GUI asg2 = new GUI();
        asg2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        asg2.setSize(500,500);
        asg2.setVisible(true);
        asg2.setTitle("Slider program");
    }
}

我有两个滑块,只有底部滑块正在检索当前值。顶部正确滑动,但当前值不会改变。有什么方法可以使两者彼此独立工作吗?

1 个答案:

答案 0 :(得分:3)

  

只有底部正在检索当前值。

slider = new JSlider(JSlider.HORIZONTAL, 0, 5, 0);
add(slider);
...
slider = new JSlider(JSlider.HORIZONTAL, 0, 5, 0);

那是因为"滑块"变量设置为最后创建的JSlider。

摆脱滑块变量。

相反,您的侦听器代码应该是:

public void stateChanged(ChangeEvent a)
{
    JSlider slider = (JSlider)e.getSource(); // added
    int value = slider.getValue();

    label.setText("Current value: " + value);
}

现在您可以访问生成事件的组件。