令人困惑的异常:ClassCastException

时间:2012-06-06 10:52:48

标签: java swing jframe jpanel parent

InsertPanel扩展JPanel,我将其添加到JFrame(我的主框架)中。 我想创建一个JDialog,将我的主框架作为其父框架的构造函数, InsertPanel.this.getParent()不返回JFrame

为什么它会给我一个ClassCastException

eclipse said:Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.JPanel cannot be cast to javax.swing.JFrame

我的代码:

    createClassButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            new CreateClassDialog((JFrame) InsertPanel.this.getParent());
        }
    });

感谢!!!

3 个答案:

答案 0 :(得分:3)

Component添加到JFrame会将其添加到JFrame的内容窗格中,该窗格可以是Container。在你的情况下,它似乎是JPanel。因此,父级不是您期望的JFrame

答案 1 :(得分:3)

如果您使用面板的方法怎么办? public Container getTopLevelAncestor()

答案 2 :(得分:2)

从异常消息中可以清楚地看到:不,您的具体InsertPanel.this.getParent()未返回JFrame,它会返回JPanel。 (这是因为JFrame还有内部窗口管理和图层和内容,所以面板的父级只是其他面板。虽然链中的某个地方你会找到JFrame。你应该找到另一种方法将框架交给对话框。