CheckBox的Java Swing ItemListener不响应状态更改

时间:2018-12-06 17:08:53

标签: java swing null

我所追求的是,​​当有人选中一个复选框时,我希望他们选择的框的文本输出到右侧面板(我有一个拆分窗格)。现在它没有响应,所以我认为我的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();
...

0 个答案:

没有答案