【问题标题】:JSlider getValue() conditionJSlider getValue() 条件
【发布时间】:2022-01-15 11:44:13
【问题描述】:

我一直在尝试使用 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 开始,标签显示为 Fine,这实际上很好,但是当我向上或向下移动滑块时,标签设置为 Best,无论我如何移动滑块,它都不会改变。请帮帮我。我根据我的知识编写了这段代码。我实际上不知道是否有其他方法可以使这个评级系统发挥作用。

【问题讨论】:

  • 您的代码中有额外的;

标签: java swing user-interface jslider


【解决方案1】:

每个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!");
}

【讨论】:

  • 请注意,如果评估 true 的条件代码包含在 {} 中,则分号(无意义但)无关紧要。
猜你喜欢
  • 2019-05-02
  • 1970-01-01
  • 1970-01-01
  • 2012-09-30
  • 2013-03-28
  • 1970-01-01
  • 2012-05-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多