カスタムクラスローダーを備えたメインフレームがあります。私のローダーは、必要に応じてメインフレームにパネルをロードしています。パネルの1つに、JDialogがあります。JDialogボックスでアプリケーションからすべてのウィンドウをブロックしたい。
パネルで私はこのようにsomtingをしたいと思います。
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 など、任意のコンテナーに自由に配置できます。