1

私はさまざまなクラスを使用しています。1つはボタン付きのメインJFrameを保持し、もう1つはボタンを押すと呼び出される新しいJFrameを保持しています。

if( event.getSource() == noteBtn ) { MiniPad.pad(); return;}

(MiniPad.pad()は新しいJFrameのクラスとpad()メソッドを参照します)

ボタンをホストしているJPanelですべてを削除してからrevalidate()とrepaint()を実行すると、ボタンはJFrameを複数回開きますが、これは私が望んでいることではありません。

一度に複数のJFrameのコピーを開くことはできないことをMiniPadクラスに伝える方法はありますか?ちなみに、それが助けになる場合に備えて、JFrameを拡張します。

4

2 に答える 2

3

最善の解決策は、フレームの代わりにモーダルダイアログを開くことです。複数のJFrameの使用、良い/悪い習慣を参照してください。多くのための。

于 2012-08-14T11:25:33.977 に答える
3

編集:以下のすべては有効なプログラミング知識ですが、代わりにクラスをMiniPad拡張することを検討することもできます。JDialog私はこれまで使用したことがありませんが、その実装はによく似ていJFrameます。MiniPadクラスで実際に多くを変更する必要はないかもしれません。ドキュメントはここにあります:http://docs.oracle.com/javase/7/docs/api/javax/swing/JDialog.html

理由がわからない場合は、AndrewThompsonの投稿をここで確認してください。

-

私があなたの質問について理解したことから、MiniPadextends JFrame、そしてメソッドはクラスpad()の新しいインスタンスを作成します。MiniPad最も簡単な解決策は、MiniPadクラスを(少なくともpad()メソッドを介して)シングルトンに変換することです。シングルトンは、一度に1つのインスタンス(またはオブジェクト)のみが存在できるクラスのタイプです。静的メソッド(この場合pad())を呼び出すことにより、オブジェクトのインスタンスがすでに存在するかどうかを確認します。含まれている場合は、その既存のオブジェクトを使用するだけです。

public class MiniPad extends JFrame {

    //whatever code you have

    private static MiniPad padInstance = null; //the singleton instance of your MiniPad

    public static MiniPad pad() {
        if(padInstance == null)
            padInstance = new MiniPad();
        //If you want to reset the object every time you call the method for whatever reason, do it here
        pad.setVisible(true); // I believe this is all you want to do
    }
}

これはあなたが望むことをするはずです。pad()メソッドを呼び出すと、 1つだけMiniPadが表示されます。

ただし、あなたの質問を間違って読んだ場合は、お知らせください。回答を修正します。

シングルトンに関する情報:http: //en.wikipedia.org/wiki/Singleton_pattern

于 2012-08-14T11:38:07.627 に答える