以下是我在下面编写的代码:
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");
}
}
我有两个滑块,只有底部滑块正在检索当前值。顶部正确滑动,但当前值不会改变。有什么方法可以使两者彼此独立工作吗?
答案 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);
}
现在您可以访问生成事件的组件。