我有一个带有自定义类加载器的 mainFrame。我的加载程序根据需要在 mainFrame 中加载面板。在其中一个面板中,我有一个 JDialog。我希望 JDialog 框阻止应用程序中的所有窗口。
在面板中,我想做这样的事情。
myDialog = new JDialog(getSelectedFrame(),"",Dialog.ModalityType...);
谢谢!
你不需要它。如果要将对话框作为框架、对话框或任何对象的父级,您只需在实例化 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 或其他任何容器。