0

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());
        }
    });

谢谢!!!

4

3 回答 3

3

将 a 添加Component到 a会将其添加到可以是 anyJFrame的内容窗格中。在您的情况下,它似乎是一个. 结果,父母不是你所期望的JFrameContainerJPanelJFrame

于 2012-06-06T10:55:26.717 回答
3

如果你使用面板的方法呢?public Container getTopLevelAncestor()

于 2012-06-06T10:56:43.463 回答
2

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

于 2012-06-06T10:55:07.987 回答