我一直在尝试用JSlider建立一个反馈系统。我希望根据不同的JLabel值将JSlider设置为不同的文本。例如,如果值小于25,我希望JLabel以坏的形式显示文本,如果值在25到50罚款之间,如果值在50到75之间,那么很好,如果值大于75,那么最好。以下是代码:
“”“
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
public class slider {
JFrame frame;
JPanel panel;
JLabel label;
JLabel rating;
JSlider slider;
slider() {
frame = new JFrame("Slider Demo");
panel = new JPanel();
label = new JLabel();
slider = new JSlider(JSlider.VERTICAL, 0, 100, 50);
rating = new JLabel();
slider.setPreferredSize(new Dimension(400, 200));
slider.setPaintTicks(true);
slider.setMinorTickSpacing(10);
slider.setPaintTrack(true);
slider.setMajorTickSpacing(25);
slider.setPaintLabels(true);
slider.setFont(new Font("MV Boli", Font.PLAIN, 15));
label.setFont(new Font("MV Boli", Font.PLAIN, 25));
rating.setFont(new Font("MV Boli", Font.PLAIN, 25));
label.setText("Please rate us! ");
rating.setText("Fine");
slider.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
int value = slider.getValue();
if (value < 25)
rating.setText("Bad!");
if (value > 25 && value < 50)
;
rating.setText("Fine!");
if (value > 50 && value < 75)
;
rating.setText("Good!");
if (value > 75)
;
rating.setText("Best!");
}
});
panel.setLayout(new FlowLayout());
panel.add(label);
panel.add(slider);
panel.add(rating);
frame.add(panel);
frame.setSize(420, 420);
frame.setVisible(true);
}
public static void main(String args[]) {
new slider();
}}
‘问题是标签没有像我想要的那样改变文字。它从我设置的值50开始,标签读起来很好,但当我移动滑块时,标签被设置为Best,无论我如何移动滑块,它都不会改变。请帮帮我。我是根据我的知识编写这段代码的。实际上,我不知道是否有其他方法使这个评级系统发挥作用。
发布于 2022-01-15 12:05:17
在每个;语句的末尾都有额外的分号if,而不应该这样。相反,它应该如下所示:
更新:
正如@c0der正确指出的那样,使用else if将更有效,而不是让程序遍历代码中的每个if语句。因此,根据这一点对下文作了修改。
public void stateChanged(ChangeEvent e) {
int value = slider.getValue();
System.out.println(value);
if (value < 25)
rating.setText("Bad!");
else if (value > 25 && value < 50)
rating.setText("Fine!");
else if (value > 50 && value < 75)
rating.setText("Good!");
else if (value > 75)
rating.setText("Best!");
}https://stackoverflow.com/questions/70721087
复制相似问题