我有一个带有自定义类加载器的mainFrame。我的加载器正在根据需要在mainFrame中加载Pannels。在其中一个面板中我有一个JDialog。我希望JDialog框能够阻止应用程序中的所有窗口。
在pnel中我想像这样做。[/ p>myDialog = new JDialog(getSelectedFrame(),"",Dialog.ModalityType...);
谢谢!
答案 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或其他任何容器的容器中。