2

我有一个带有自定义类加载器的 mainFrame。我的加载程序根据需要在 mainFrame 中加载面板。在其中一个面板中,我有一个 JDialog。我希望 JDialog 框阻止应用程序中的所有窗口。

在面板中,我想做这样的事情。

myDialog = new JDialog(getSelectedFrame(),"",Dialog.ModalityType...);

谢谢!

4

1 回答 1

4

你不需要它。如果要将对话框作为框架、对话框或任何对象的父级,您只需在实例化 JDialog 的组件上调用 getTopLevelAncestor()。这使得知道框架无关紧要,这有助于确保调用或重用代码的人可以在任何组件上使用它:框架、另一个对话框、窗口等。

http://docs.oracle.com/javase/6/docs/api/javax/swing/JComponent.html#getTopLevelAncestor ()

例如:

class MySpecialPanel extends JPanel {

    public MySpecialPanel() {

        JButton button = new JButton( new AbstractAction("Show") {
            public void actionPerformed(ActionEvent event) {
                JDialog dialog = new JDialog( (Window)getTopLevelAncestor(), "Some Title", Dialog.ModalityType.DOCUMENT_MODAL );
                dialog.add( new DialogPanel() );
                dialog.show();
            }
        });
    }
}

现在通过使用 MySpecialPanel.getTopLevelAncestor() 您正在创建的对话框不需要知道它的确切组件。并且使用 MySpecialPanel 的客户端可以自由地将这个面板放入它想要的任何容器中,例如 JFrame、另一个 JDialog 或其他任何容器。

于 2012-04-23T01:01:42.277 回答