"AWT-EventQueue-0" ClassCastException:无法转换 JPanel MyJTestPanel
"AWT-EventQueue-0" ClassCastException: JPanel cannot be cast MyJTestPanel
程序没有关闭,但是当我点击我的复选框时,出现这样的异常;
我的 class 在这里,它是从 JPanel 扩展的,我的 class 在这里,它是从 JPanel 扩展的,我的 class 在这里,它是从 JPanel 扩展的,我的 class 在这里,它是从 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;
}
}
我的点击监听器在这里
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...
}
}
});
有没有关于这个例外的想法?
您正在尝试将 getCenterPanel().getComponents()[i] 的结果转换为 MyJTestPanel,并且其中之一您遇到的组件是 JPanel。
如果您在该循环中遇到的所有组件都是 MyJTestPanel / extend MyJTestPanel,则转换会起作用,但至少有一个 JPanel 不符合此条件,因此转换失败。
程序没有关闭,但是当我点击我的复选框时,出现这样的异常;
我的 class 在这里,它是从 JPanel 扩展的,我的 class 在这里,它是从 JPanel 扩展的,我的 class 在这里,它是从 JPanel 扩展的,我的 class 在这里,它是从 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;
}
}
我的点击监听器在这里
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...
}
}
});
有没有关于这个例外的想法?
您正在尝试将 getCenterPanel().getComponents()[i] 的结果转换为 MyJTestPanel,并且其中之一您遇到的组件是 JPanel。
如果您在该循环中遇到的所有组件都是 MyJTestPanel / extend MyJTestPanel,则转换会起作用,但至少有一个 JPanel 不符合此条件,因此转换失败。