代码之家  ›  专栏  ›  技术社区  ›  Maxxx

在jLabel中显示jComboBox选定项

  •  0
  • Maxxx  · 技术社区  · 6 年前

    JFrame 图形用户界面拖放元素,我目前正在处理组合框。下面是GUI。

    enter image description here

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        for (int i = 0; i<10; i++) {
            String str_rep = Integer.toString(i);
            jComboBox1.addItem(str_rep);
        }
        jComboBox1.setSelectedItem(null);
     }
    

    一旦数字被添加到组合框中,我 将所选项目设置为空 因为我 我不想 组合框 显示第一个元素 一旦按下按钮。

    jLabel2 显示基于组合框选择的内容,但一旦按下“按下”按钮,标签将自动显示第一个数字0,即使我将组合框选定项设置为 null .

    private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {
        jLabel2.setText(jComboBox1.getSelectedItem().toString());
    }    
    

    enter image description here

    防止标签显示第一个数字 按钮已按下 ? 它应该 在我从组合框中选择一个数字之前,它将更新为该数字。

    0 回复  |  直到 6 年前
        1
  •  0
  •   Prasad Karunagoda    6 年前

    ComboBoxAndLabel 同学们,我试图重现你们的问题。

    import javax.swing.*;
    import java.awt.BorderLayout;
    import java.awt.event.*;
    
    public class ComboBoxAndLabel {
    
      public static void main(String[] args) {
    
        JLabel jLabel2 = new JLabel("jLabel2");
    
        JComboBox<String> jComboBox1 = new JComboBox<>();
        jComboBox1.addActionListener(new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {
            jLabel2.setText(jComboBox1.getSelectedItem().toString());
          }
        });
    
        JButton button = new JButton("Press");
        button.addActionListener(new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {
            for (int i = 0; i<10; i++) {
              String str_rep = Integer.toString(i);
              jComboBox1.addItem(str_rep);
            }
            jComboBox1.setSelectedItem(null);
          }
        });
    
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(button, BorderLayout.NORTH);
        frame.getContentPane().add(jComboBox1, BorderLayout.CENTER);
        frame.getContentPane().add(jLabel2, BorderLayout.SOUTH);
        frame.setBounds(400, 300, 400, 300);
        frame.setVisible(true);
      }
    }
    

    当我运行上面的程序时,我在控制台中看到下面的错误(我想您也会得到这个错误)。

    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
      at ComboBoxAndLabel$1.actionPerformed(ComboBoxAndLabel.java:21)
      at javax.swing.JComboBox.fireActionEvent(JComboBox.java:1258)
      at javax.swing.JComboBox.setSelectedItem(JComboBox.java:586)
      at ComboBoxAndLabel$2.actionPerformed(ComboBoxAndLabel.java:35)
      at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
      at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
      at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
      at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
      at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    

    jComboBox1.addItem() 方法在组合框为空时设置所选项(请参阅 DefaultComboBoxModel.addElement() jComboBox1.setSelectedItem(null)

    但是如果你用 jComboBox1.setModel() jComboBox1.setSelectedItem(空) jButton1ActionPerformed 这样地:

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        DefaultComboBoxModel<String> comboBoxModel = new DefaultComboBoxModel<>();
        for (int i = 0; i<10; i++) {
          String str_rep = Integer.toString(i);
          comboBoxModel.addElement(str_rep);
        }
        jComboBox1.setModel(comboBoxModel);
    }
    

    import javax.swing.*;
    import java.awt.BorderLayout;
    import java.awt.event.*;
    
    public class ComboBoxAndLabelSolution {
    
      public static void main(String[] args) {
    
        JLabel jLabel2 = new JLabel("jLabel2");
    
        JComboBox<String> jComboBox1 = new JComboBox<>();
        jComboBox1.addActionListener(new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {
            jLabel2.setText(jComboBox1.getSelectedItem().toString());
          }
        });
    
        JButton button = new JButton("Press");
        button.addActionListener(new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {
            DefaultComboBoxModel<String> comboBoxModel = new DefaultComboBoxModel<>();
            for (int i = 0; i<10; i++) {
              String str_rep = Integer.toString(i);
              comboBoxModel.addElement(str_rep);
            }
            jComboBox1.setModel(comboBoxModel);
          }
        });
    
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(button, BorderLayout.NORTH);
        frame.getContentPane().add(jComboBox1, BorderLayout.CENTER);
        frame.getContentPane().add(jLabel2, BorderLayout.SOUTH);
        frame.setBounds(400, 300, 400, 300);
        frame.setVisible(true);
      }
    }