2011-12-21 8 views
1

私は2フレームあります。です。私は次のことをしたい: 親フレームが活性化または非アイコン化されると、子フレームは同じことをする。Javaスイング:1つのフレームから他のイベントを聴いたり、繰り返したりする

private void attachListeners() 
    { 
     if (parentFrame != null) 
     { 
      parentFrame.addComponentListener(this); 
      parentFrame.addWindowListener(new ViewEventAdapter(this)); 
     } 
    @Override 
     public void viewActivated() 
     {    
      // show it when the parent is activated 
      if (!childFrame.isVisible()) 
      { 
         childFrame.setVisible(true); 
         parentFrame.toFront(); 
      } 
     } 

しかし、これは無限ループのちらつきを引き起こします。私はtoFront()を削除すると、私は親フレームにフォーカスを切り替えることはできません。どうにかしてフォーカスを正しく切り替えるだけです。

リスナーコード:

public class ViewEventAdapter implements WindowListener, InternalFrameListener 
{ 
    private MyViewListener listener = null; 


    public ViewEventAdapter(MiaViewListener inListener) 
    { 
     listener = inListener; 
    } 


    @Override 
    public void windowActivated(WindowEvent inE) 
    { 
     listener.viewActivated(); 
    } 


    @Override 
    public void windowClosed(WindowEvent inE) 
    { 
     listener.viewClosed(); 
    } 


    @Override 
    public void windowClosing(WindowEvent inE) 
    { 
     listener.viewClosing(); 
    } 


    @Override 
    public void windowDeactivated(WindowEvent inE) 
    { 
     listener.viewDeactivated(); 
    } 


    @Override 
    public void windowDeiconified(WindowEvent inE) 
    { 
     listener.viewDeiconified(); 
    } 


    @Override 
    public void windowIconified(WindowEvent inE) 
    { 
     listener.viewIconified(); 
    } 


    @Override 
    public void windowOpened(WindowEvent inE) 
    { 
     listener.viewOpened(); 
    } 


    @Override 
    public void internalFrameActivated(InternalFrameEvent inE) 
    { 
     listener.viewActivated(); 
    } 


    @Override 
    public void internalFrameClosed(InternalFrameEvent inE) 
    { 
     listener.viewClosed(); 
    } 


    @Override 
    public void internalFrameClosing(InternalFrameEvent inE) 
    { 
     listener.viewClosing(); 
    } 


    @Override 
    public void internalFrameDeactivated(InternalFrameEvent inE) 
    { 
     listener.viewDeactivated(); 
    } 


    @Override 
    public void internalFrameDeiconified(InternalFrameEvent inE) 
    { 
     listener.viewDeiconified(); 
    } 


    @Override 
    public void internalFrameIconified(InternalFrameEvent inE) 
    { 
     listener.viewIconified(); 
    } 


    @Override 
    public void internalFrameOpened(InternalFrameEvent inE) 
    { 
     listener.viewOpened(); 
    } 
} 

public interface MyViewListener 
{ 
    /** 
    * Called when a view is activated 
    */ 
    public void viewActivated(); 

    /** 
    * Called when a view is closed 
    */ 
    public void viewClosed(); 

    /** 
    * Called when a view is closing 
    */ 
    public void viewClosing(); 

    /** 
    * Called when a view is deactivated 
    */ 
    public void viewDeactivated(); 

    /** 
    * Called when a view is deiconified 
    */ 
    public void viewDeiconified(); 

    /** 
    * Called when a view is iconified 
    */ 
    public void viewIconified(); 

    /** 
    * Called when a view is opened 
    */ 
    public void viewOpened(); 
} 

助けてください。前もって感謝します。

+1

このコードはコンパイルされません:)あなたは 'ViewEventAdapter'コードを投稿できますか? – GETah

+0

ViewEventAdapterのコードが追加されました – bunnyjesse112

答えて

2

2枚のJFramesを使用しないでください。

代わりに、親はJFrameであり、子は非モーダルのJDialogでなければなりません。ダイアログを作成するときは、フレームを親として指定し、デフォルトでこの動作を取得します。

これはほとんどのアプリケーションの設計方法です。

+0

応答ありがとうございます。私は2枚のJFrameが必要です。フレームの親フレームを指定する方法はありますか? – bunnyjesse112

+1

なぜあなたは2枚のJFramesが必要だと思いますか?別々のフレームを作成する場合、フレームは互いに独立して動作する必要があります。ウィンドウが反応するようにするには、標準デザインで1つのJFrameと1つ以上の子JDialogを使用します。 JFrameのように、JDialogに任意のコンポーネントを追加できます。 JFrame/JDialogを一緒に使用すると、タスクバーには1つのアイコンだけが表示され、一緒に開いたり閉じたりします。 2つのJframesを使用する場合、タスクバーに2つのアイコンが表示され、それらを別々に開閉する必要があります。標準デザインではないため、親を指定する方法はありません。 – camickr

+0

2つのフレームを一緒に反応させる方法はありません。恥... – bunnyjesse112

関連する問題