Java - 我们如何获得选定或活动的帧(getSelectedFrame())并将其传递给JDialog()?

时间:2012-04-23 00:37:53

标签: java swing jdialog

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

在pnel中我想像这样做。[/ p>
myDialog = new JDialog(getSelectedFrame(),"",Dialog.ModalityType...);

谢谢!

1 个答案:

答案 0 :(得分: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或其他任何容器的容器中。