“AWT-EventQueue-0”ClassCastException:JPanel无法强制转换MyJTestPanel

时间:2016-03-24 15:10:39

标签: java swing jframe jcheckbox

程序没有关闭但是当我点击我的复选框时,我得到这样的例外; enter image description here

我的班级在这里,它是从JPanel扩展的,我的班级在这里,它是从JPanel延伸,我的班级在这里,它是从JPanel延伸,我的班级在这里,它是从JPanel扩展

 public class MyJTestPanel extends JPanel {

private JCheckBox cboxInfo;
private JLabel lblResult;
private JButton btnAgain;

public MyJTestPanel(String testName, String testContext){

    setLayout(new MigLayout());
    setMaximumSize(new Dimension(400, 30));
    setName(testName);

    cboxInfo = new JCheckBox(testContext);
    add(cboxInfo, "gapright 10, height 30, width 250, cell 0 0");

    lblResult = new JLabel();
    lblResult = new JLabel();
    lblResult.setBackground(Color.RED);
    lblResult.setOpaque(true);
    add(lblResult, "gapright 10, height 30, width 30, cell 1 0");

    btnAgain = new JButton("Test again");
    btnAgain.setVisible(false);
    add(btnAgain,"height 30, width 80, cell 2 0");

}


public JCheckBox getCboxInfo() {
    return cboxInfo;
}

public JLabel getLblResult() {
    return lblResult;
}

public JButton getBtnAgain() {
    return btnAgain;
}

}

我的clicklistener就在这里

cboxSelectAll.addItemListener(new ItemListener() {
                public void itemStateChanged(ItemEvent e) {
                    boolean isChecked = ((JCheckBox) e.getItem()).isSelected();
                    for (int i = 0; i < getCenterPanel().getComponents().length; i++) {

                        ((MyJTestPanel) getCenterPanel().getComponents()[i]).getCboxInfo().setSelected(isChecked);//exception is here...
                    }
                }
            });

这个例外有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您正在尝试将 getCenterPanel()。getComponents()[i] 的结果转换为 MyJTestPanel ,您遇到的其中一个组件是JPanel。

如果你在该循环中遇到的所有组件都是MyJTestPanel / extend MyJTestPanel,那么强制转换就可以了,但至少有一个,JPanel,不符合这个标准,因此强制转换失败。