2011-02-01 5 views
4

私は他のすべてのクラスに入れたメニューバークラス(MenuBarGUI)を持っており、メニューのオプションを使って現在のJFrameを閉じることができるかどうかを知る必要があります。通常はsetVisible(false)を呼び出してdispose()を呼び出すことができますが、メニューバーには現在のフレームへの参照がないため、できません。これを行う方法はありますか?Javaの現在のフレームへの参照を取得する方法はありますか?

答えて

4

あなたMenuBarGUIクラスはJMenuBarのを拡張する場合は、メニューバーのウィンドウを取得するにはgetTopLevelAncestorメソッドを使用することができます。

+0

ありがとうございます。これはうまくいった。私はコンテナをキャストし、setVisible(false)とdispose()を呼び出し、それがうまくいった。 – LOD121

1

getParent()は、親コンテナを取得します。この方法では、いくつかのキャストを行う必要があります。より理想的な選択肢は、メニューバーがcloseメソッドを含むインターフェースをとることができるようにすることです。ここで

は一例です:

JFrame frame = new JFrame(); 
    JMenuBar bar = new JMenuBar(); 
    frame.setJMenuBar(bar); 
    if(bar.getParent().getParent().getParent() instanceof JFrame){ 
     System.out.println(bar.getParent().getParent().getParent()); 
    } 
+0

はどのように正確に私はのgetParent()メソッドを実装することができ?コンテナをウィンドウにキャストすることがどれほど安全かはわかりません(非常に安全ではないようです)。また、私は他の方法をどのように実装できますか? – LOD121

+0

私は例を追加しましたが、このルートに行く場合は、GurselのgetTopLevelAncestorの提案がより適切でしょう。 – jzd

+0

ありがとうございます。 instanceofを使用してJFrameのインスタンスであるかどうかを確認した後、JFrameにコンテナをキャストし、setVisible(false)およびdispose()を実行してウィンドウを閉じました。それはうまくいった。 – LOD121

0

上記のアプローチのどれも私には効果がありませんでした。

私はパネルの直接の親を必要とするので、スーパーの呼び出しを通じて直接アクセス:super.setTitle(「新しいフレームタイトル」)など

関連する問題