首页 > 解决方案 > CheckBox 的 Java Swing ItemListener 未响应状态更改

问题描述

我想要的是每当有人选中复选框时,他们选择的框的文本输出到右侧面板(我有一个拆分窗格)。现在它没有响应,所以我认为我的 BoxHandler 工作不正常(实现 ItemListener)。我的函数 addBoxListeners 应该为我拥有的每个复选框添加项目侦听器,并且我在 BoxHandler 中覆盖的函数,函数 itemStateChanged 应该将文本添加到右侧面板,并且我知道 addText 正在工作,因为我在 itemListener 之外对其进行了测试。

  void addText(String s) { // adds text to the right panel, adds string s
      JLabel temp = new JLabel();
      temp.setText(s);
      temp.setBorder(border1);
      rightPanel.add(temp);
  }

  void addBoxes() {
    int i = 0;

    GridBagConstraints gbc = new GridBagConstraints();
    gbc.gridwidth = GridBagConstraints.REMAINDER;
    for (i = 0; i < 10; i++) {
      JCheckBox tempBox = new JCheckBox("word " + i);
      boxes.add(tempBox);
      leftPanel.add(tempBox, gbc);
      //leftPanel.add(new JCheckBox("word" + i), gbc);
    }
  }
  private class BoxHandler implements ItemListener{
      public void itemStateChanged(ItemEvent event) {
            for (JCheckBox checkBox : boxes) {
                if (checkBox.isSelected() ) {
                    addText(checkBox.getText());
                }
            }
      }
  }

   void addBoxListeners() { // add listeners to all the boxes in the arraylist
      BoxHandler handler = new BoxHandler();
      int i = 0;
      for ( i = 0; i < boxes.size(); i++) {
          boxes.get(i).addItemListener(handler);
      }
  }

 public static void main(String[] args) {
    // TODO Auto-generated method stub

    CheckBox2 cb = new CheckBox2();
    cb.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    cb.pack();
    cb.setLocationRelativeTo(null);
    cb.addBoxListeners();

    cb.setVisible(true);
  }

以下是我的班级声明的一部分:

public class CheckBox2 extends JFrame {

  private ArrayList<JCheckBox> boxes = new ArrayList<JCheckBox>();
  JSplitPane splitPane;
  EmptyBorder border1 = new EmptyBorder(5, 5, 5, 5);
  private JPanel leftPanel = new JPanel();
  private JPanel rightPanel = new JPanel();
    JLabel labelOne = new JLabel();
    JLabel labelTwo = new JLabel();
...

标签: javaswingnull

解决方案


推荐阅读