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

我有一个JComboBox有12个不同的选择,根据选择的内容,我希望问题(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"); } } }); 

如果选择圆形,则打印出“选择圆形所选方形”,如果选择“方形”,则选择“选定方形圆形”。

ItemListener添加到JComboBox以在选择更改时作出反应。

此外,当你这样做:

 Object isSelected = choiceBox.getSelectedItem(); 

……你刚刚获得所选的价值; 每当combobox更新时,你不会神奇地绑定isSelected变量来更新。 如果需要新值,则需要再次调用getSelectedItem()

尝试将动作侦听器添加到JComboBox

 choiceBox.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ //put the code here } }); 

更改JLabel的文本

 label.setText("Changed text"); 

告诉容器重新布局。

 frame.invalidate(); frame.repaint(); 

这样可确保重绘框架以显示更改的标签。 要知道combobox何时更改了它的选择,请添加这样的ActionListener

 combo.addActionListener (new ActionListener () { public void actionPerformed(ActionEvent e) { label.setText(combo.getText()); frame.invalidate(); } });