0

マウス クリックのイベントで JDesktopPane に追加される複数の JInternalFrames を持つ Swing アプリケーションを作成しました。同じ内部フレームのインスタンスを 1 つだけ DesktopPane に表示したい。ユーザーがフレームを開いたときに、同じフレームが 2 回表示されるのは望ましくありません。

4

6 に答える 6

2

問題の簡単な解決策は、を作成することHashMap<String,JInternalFrame>です。はそのkeyタイトルにJInternalFrameなりvalueobject現在開いているものになります。内部フレームを最初に開いたときにJInternalframekey,value)ペアを保存します。ユーザーが表示されたウィンドウを破棄できないように、HashMapすべてのウィンドウの閉じるボタンを無効にします。各オブジェクトにキーを登録し、キーボードのボタンを押したときに現在の表示が最小化されるようにします。次に、クリックして同じ内部フレームを開くときに、そのフレームがとして存在するかどうかを確認します。存在する場合は、そのためにを取得しますJInternalFrameJInternalFrameescJInternalFrameescJInternalFrameDesktopPanemenu itemtitleJInternalFrameHashMapkeyvaluekey変数で参照してからJInternalFrame、で同じものを復元しDesktopPaneます。の対応するエントリがその中にtitle存在しない場合はHashMap、新しいJInternalFrameオブジェクトを作成し、に同じエントリを作成しHasMapて表示します。

注:ここに投稿したものは、JInternalFrameそれぞれが固有の異なる多くのタイプを持つことができ、それぞれのfunctionality1つだけを保持したいという状況の解決策です。instanceJInternalFrame

于 2013-03-17T13:25:47.307 に答える
2

これが5月のサンプルコードです。この助けを願っています。JdesktopPane が含まれるメイン アプリケーションの内部フレームを呼び出すメニュー アクション。

 private void YourJinternalFrameMenuItemActionPerformed(java.awt.event.ActionEvent evt) {                                                 

    YourJinternalFrame nw = YourJinternalFrame.getInstance();
    nw.pack();
    //usefull part for you.. if open shows, if not creates new one 
    if (nw.isVisible()) {
    } else {
        desktopPane.add(nw);
        nw.setVisible(true);
    }
    try {

        nw.setMaximum(true);
    } catch (PropertyVetoException ex) {
        Logger.getLogger(MainApplication.class.getName()).log(Level.SEVERE, null, ex);
    }
}   

これを YourJinternalFrame の中に入れます

private static YourJinternalFrame myInstance;

public static YourJinternalFrame getInstance() {
    if (myInstance == null) {
    myInstance = new YourJinternalFrame();
    }
return myInstance;
于 2013-03-24T16:37:51.157 に答える
1

この簡単なコードを試してください:

YourJinternalFrame nw = new YourJinternalFrame();

private void YourJinternalFrameMenuItemActionPerformed(java.awt.event.ActionEvent evt) {                                                  
    if(!nw.isVisible()){
        YourJDesktopPane.add(nw);
        nw.setVisible(true);
    }

}   
于 2013-04-02T21:17:36.667 に答える
0

この単純なコードを試して、クラス変数 chk を取り、0 に設定してから、このセット chk =0 で削除された jframe メソッド componentremoved をもう一度呼び出します。

于 2013-07-19T03:17:45.633 に答える