簡體   English   中英

JSlider getValue() 條件

[英]JSlider getValue() condition

我一直在嘗試用 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();
}

}

''' 問題是 label 沒有按照我的意願更改文本。 It starts with value 50 as I set and the label reads Fine which is actually fine but when I move the slider up or down the label is set to Best and it won't change no matter how I move my slider. 請幫幫我。 我根據我的知識編寫了這段代碼。 我實際上並不知道是否有其他方法可以使這個評級系統發揮作用。

你有多余的分號; 在每個if語句的末尾,你不應該這樣做。 相反,它應該如下所示:

更新:

正如@c0der 正確指出的那樣,使用else if會更有效,而不是通過代碼中的每個if語句將程序轉到 go 。 因此,以下根據此進行修改。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM