java - 每次 JComboBox 更改时如何更新 JLabel?

标签 java swing jlabel jcombobox itemlistener

我有一个包含 12 个不同选择的 JComboBox,根据选择的内容,我希望问题 (JLabel) 更改以匹配选择。我尝试了一个 if 语句来查看选择了什么,如果它与应该选择的相匹配,那么问题会相应地改变,但 JLabel 在某种情况下从未真正改变过。

代码

import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.*;

public class Window extends JFrame{
    private static final long serialVersionUID = 1L;
    public Window(){
        super("Area Finder v1.0");
        BufferedImage image = null;

        try {
            image = ImageIO.read(getClass().getClassLoader().getResource("images/areafinder.png"));
        } catch (IOException e) {
            e.printStackTrace();
        }
        super.setIconImage(image);
        setSize(400, 500);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        JLabel Instr = new JLabel("What would kind of area would you like to find?");
        String[] areaChoices = {"Circle", "Square", "Rectangle", "Triangle", "Trapezoid", "Parallelogram", "Hexagon", "Rhombus", "Pentagon", "Polygon", "Ellipse", "Sector"};
        final JComboBox<?> choiceBox = new JComboBox(areaChoices);
        final Object isSelected = choiceBox.getSelectedItem();
        choiceBox.setToolTipText("Select which one you want to find the area of!");
        choiceBox.setSelectedIndex(0);
        final JLabel q = new JLabel("");
        final JTextField inputFromUser = new JTextField("");
        JButton findArea = new JButton("Find Area");
        /* Question Changer*/

        /*End of Question Changer*/
        findArea.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent arg0){
                if(isSelected == "Circle"){
                    double radius = Double.parseDouble(inputFromUser.getText());
                    double area = 3.14 * (radius * radius);
                    JOptionPane.showMessageDialog(null, "Your Area is " + area);
                }else if(isSelected == "Square"){
                    
                }
                
            }
        });
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.insets = new Insets(15,15,15,15);
        panel.add(Instr);
        panel.add(choiceBox);
        panel.add(findArea);
        panel.add(q);
        panel.add(inputFromUser);
        add(panel);
    }
}

编辑:所以我用 System.out.println(); 做了一些测试;我发现它是一次调用所有项目,但首先调用的是被选中的项目。 示例:

choiceBox.addItemListener(new ItemListener(){
    @Override
    public void itemStateChanged(ItemEvent e) {
        if(e.getItem() == "Circle"){
        System.out.println("Circle selected");
        }else if(e.getItem() == "Square"){
            System.out.println("Square selected");
        }
            
    }
    
});

如果选择圆形,则打印“Circle Selected Square Selected”,但如果选择 Square,则打印“Square Selected Circle Selected”。

最佳答案

ItemListener 添加到 JComboBox 以在选择更改时使用react。

此外,当您这样做时:

Object isSelected = choiceBox.getSelectedItem();

...你当时只是得到了选择的值;您并没有神奇地将 isSelected 变量绑定(bind)到组合框更新时更新。如果您需要新值,您需要再次调用 getSelectedItem()

关于java - 每次 JComboBox 更改时如何更新 JLabel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16995311/

相关文章:

带有滑动效果的JavaFX Switch场景

java - 如何为 JLabel 设置禁用的文本颜色?

Java 通用拼图

java - 使用 Java 在 MarkLogic 数据库中搜索多个键值对

java - 使用哪个布局管理器?

java - 重写 setPreferredSize() 和 getPreferredSize()

java - 如何创建这样的 Java swing UI?

java - 在Java中指定JLabels高度之间一定的间距

java - 在 JPanel 中插入 JLabel 不会将其置于顶部

java - 如何让GridView居于设备中心?