2

したがって、2 つの Java クラスがあり、それぞれがさまざまなコンポーネントを含む JFrame を作成します。addComponentsToPane(...)各クラスには、フレームの内容を設定する独自のメソッドがあります。これはcreateAndShowGui()、クラスのメイン メソッドで呼び出されるメソッドで使用されます。

それらをクラスAとBと呼びましょう。つまり、AIには、クリックするとBを起動するボタンがあります(の単純な呼び出しB.main(null)。私がやろうとしているのは、ボタンがクリックされたときにウィンドウ B を開きますが、もう一度クリックしても開きません.今では、ブール値を設定するだけでこれをほとんどうまく管理できますが、問題はもちろん、一度クリックするとウィンドウが開き、それで問題ありません...しかし、ウィンドウ B を閉じて、もう一度 A の適切なボタンをクリックしても何も起こりません...ブール値はまだ B が開いていると言っているからです。

だから私が疑問に思っているのは、この種のセットアップを考えると、B が閉じているときに A でそのブール値をリセットできる方法があるということですか? 私は B の a で何かできるかもしれないとWindowListener考えていましたが、それが可能な解決策である場合、それを行うために何を構成するかはまだわかりません..

4

2 に答える 2

2

B を破棄したり、参照を null に設定したりしないでください。閉じたときに非表示にするだけです。アプリケーションの起動時に非表示にすることも、A からオンデマンドで作成することもできます。

A.Button は --> B.show() を呼び出します。

B が JFrame の場合 (おそらくそうあるべきです)、 を呼び出して「X」を閉じる際の動作を設定できますJFrame.setDefaultCloseOperation()。デフォルトはすでに になっているはずです WindowConstants.HIDE_ON_CLOSE

于 2013-08-08T08:15:56.163 に答える
1

基本的にあなたがしなければならないことは、1 つの Frame を「メイン」フレームにすることです。つまり、メインのメソッドが含まれていることを意味します。あなたの場合、それはフレーム A になります。次に、フレーム B をフレーム A の一部にします (JFrame の代わりに JDialog を使用します)。

何かのようなもの:

public MainApp extends JFrame { // Frame A
    ...
    private static CustomWindowB FrameB = null;
    ...
    public static void main(String[] args){
       super();
       FrameB = new CustomWindowB(...);
       ...
    }
    ...
    public void FunctionCalledByButtonClick(){
        if(FrameB == null){
           FrameB = new CustomWindowB(...);
        } else {
           if(FrameB.isVisible()){
              FrameB.hide();
           } else {
              FrameB.show();
           }
        }
    }
 }

B の場合、次のことができます。

public CustomWindowB extends JDialog {  // Frame B

   public CustomWindowB(...){
      super();
      ...
      this.setVisible(true);
   }

   public void hide(){
      this.setVisisble(false);
   }

   public void show(){
      this.setVisisble(true);
   }
}
于 2013-08-08T07:24:19.337 に答える