2013-05-04 6 views
10
void terminate() {} 
protected JFrame frame = new JFrame(); 

閉じるボタンを押したときに終了する機能を実行するには、どうすればframeを得ることができますか?JFrameで実行機能を閉じる

編集:これを実行しようとしましたが、何らかの理由でテストを印刷しません(ただし、プログラムが終了します)。誰が問題になるか考えている人はいますか?

frame.addWindowListener(new WindowAdapter() { 
    public void WindowClosing(WindowEvent e) { 
     System.out.println("test"); 
     frame.dispose(); 
    } 
}); 

答えて

13

あなたはaddWindowListenerを使用することができます。

frame.addWindowListener(new WindowAdapter() 
{ 
    public void windowClosing(WindowEvent e) 
    { 
     ... //call terminate 
     ... 
    } 
}); 

はあまりにもvoid windowClosing(WindowEvent e)Class WindowAdapterを参照してください。

+0

JFrameを拡張し、WindowAdapterを実装する新しいクラスを作成する必要がありますか? (または、フレームをJFrameとして保持してもかまいませんか?) 実際には動作しません。「新しいWindowAdapter(){}メソッドがローカルで使用されることはありません」という警告が表示されますWindowClosing関数 – Mattias

+0

変更後にコードを投稿してください。 – Maroun

+0

さて、コードを編集として追加しました。 – Mattias

1

JFrameを閉じた後でプログラムを終了したい場合は、JFrameのデフォルトの終了操作を設定する必要があります。あなたのJFrameの書き込みのコンストラクタで

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

あなただけMarounの答えで行くよりも、ウィンドウが閉じられたときにメソッドを呼び出すと、全体のプログラムを終了しないようにしたい場合。

+0

私は両方を(機能を実行し、終了する)したいと思います。ここに私の現在のコードは次のとおりです。 \t \t frame.addWindowListener(新WindowAdapterを(){ \t \t \t公共ボイドWindowClosing(のWindowEvent e)は{ \t \t \t \tのSystem.out.println( "テスト"); \t \t \t \t frame.dispose(); \t \t \t} \t \t}); 問題は「テスト」が印刷されないことです。何が問題なのか考えていますか? – Mattias

+1

このメソッドは、 "WindowClosing"ではなく "windowClosing"です。あなたはそれを上書きする必要があるので、正確な名前でなければなりません。答えは –

13

ウィンドウリスナーを追加するだけでなく、閉じるときに何も行わないようにデフォルトのクローズ操作を設定する必要があります。これにより、コードを実行することができます。

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 
    frame.addWindowListener(new WindowAdapter() { 
     @Override 
     public void windowClosing(WindowEvent event) { 
      exitProcedure(); 
     } 
    }); 

最後に、システム終了を呼び出すと、実際にプログラムが実行されなくなります。

public void exitProcedure() { 
    frame.dispose(); 
    System.exit(0); 
} 
+1

+1ですが、特に '@ Override'です。非常に良いアドバイス。いいえ(再考)***素晴らしいアドバイス***。 :) –

+1

+1。確かに。私は@ AndrewThompsonと一緒です:) – Maroun

0

Frame.dispose()メソッドはプログラムを終了しません。プログラムを終了するには、System.exit(0)メソッドを呼び出す必要があります

関連する問題