2

カスタムクラスローダーを備えたメインフレームがあります。私のローダーは、必要に応じてメインフレームにパネルをロードしています。パネルの1つに、JDialogがあります。JDialogボックスでアプリケーションからすべてのウィンドウをブロックしたい。

パネルで私はこのようにsomtingをしたいと思います。

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 に答える