2012-02-15 6 views
0
JButton btnNewButton = new JButton("Register Student"); 
btnNewButton.addMouseListener(new MouseAdapter() { 
    @Override 
    public void mouseClicked(MouseEvent arg0) { 
     RegisterStudent panel_1 = new RegisterStudent(); 
     panel_1.setVisible(true); 
    } 
}); 
btnNewButton.setBounds(0, 162, 167, 37); 
panel.add(btnNewButton); 

ある特定のウィンドウが既に開いている場合は、もう一度開くことができますか? 私は、ユーザーがボタンを何度かクリックして、いくつかのウィンドウが同じ内容で開かれるようにしたくないからですか?Java Window Duplication Prevention

+0

'ウィンドウ'をモーダルダイアログにします。これは、デフォルトの動作で問題を解決します。また、「境界」を設定しないでください。これは非常に壊れやすいGUIにつながります。 –

答えて

2

マウスリスナーブロックの外側でpanel_1変数を作成し、nullに初期化します。マウスをクリックすると、panel_1がnullであるかどうかを確認し、そうであれば作成します。

final RegisterStudent panel_1 = new RegisterStudent(); 
JButton btnNewButton = new JButton("Register Student"); 
btnNewButton.addMouseListener(new MouseAdapter() { 
    @Override 
    public void mouseClicked(MouseEvent arg0) { 
     panel_1.setVisible(true); 
    } 
}); 
btnNewButton.setBounds(0, 162, 167, 37); 
panel.add(btnNewButton); 
+0

こんにちは@トニー、私はちょうどあなたの方法を試してみましたが、それはエラーメッセージを表示しますか? これを書いたとおりに行うと、コード内のすべてのpanel_1に下線が引かれて、別の方法で内部クラス定義者の中で最後の変数でないpanel_1を参照することはできません。 panel_1の修飾子をfinalに変更すると、7行目のpanel_1にアンダーライン型では定義されていないので、最終的なローカル変数panel_1を割り当てることができないということになります。アドバイスをお願いしますか? –

+0

あなたは間違いなしです。内部クラスの内部で使用するためには、panel_1をfinalとして宣言する必要があります。作成時に変数をインスタンス化する必要があります。 – Tony

+0

どうすれば私のエラーを回避できますか?それは私が言ったように7行目にエラーを表示するので?私はそれを修正するために何ができますか? –

1

あなたは1.2以降Frame.getFrames()で1.6または開いているすべてのフレーム以降Window.getWindows()から開いているすべてのウィンドウの配列を取得することができます。 nameプロパティまたはwindowクラス(RegisterStudent)を使用して、ウィンドウがすでに開いているかどうかをテストし、そのウィンドウにフォーカスを設定し、別のウィンドウを開くことができます。