私はJava Swingと、イベントを処理するすべてのメソッドのオーバーライドを行わないようにアダプターパターンを使用してイベントを処理する方法を研究しています。
この短い例を見つけました。理解しているかどうかを知りたいです。
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
public class Sketcher {
JFrame window = new JFrame("Sketcher");
public Sketcher() {
window.setBounds(30, 30, 300, 300);
window.addWindowListener(new WindowHandler());
window.setVisible(true);
}
class WindowHandler extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.out.println("closing");
window.dispose(); // Release the window resources
System.exit(0); // End the application
}
}
public static void main(String[] args) {
new Sketcher();
}
}
私が理解していることは次のとおりです。
Sketcherクラスには、新しい Sketcher インスタンスを単純に作成する main メソッドが含まれています。
スケッチャーインスタンスは、単にフレームをモニターに表示する新しい JFrame オブジェクトを作成します。
したがって、新しいスケッチャー オブジェクトを作成すると、新しい JFrame オブジェクトが作成されます。
そして、ここで最初の疑問があります (これは一般的な Java の疑いです)。
Sketcher クラスのコンストラクター内で JFrame の windows オブジェクトを作成しないのはなぜですか?
とにかく、コンストラクターで JFrame オブジェクトのプロパティを設定し、この JFrame に WindowListener を追加します。
addWindowListener は、ウィンドウ イベントを処理するカスタム オブジェクトである新しいWindowHandlerオブジェクトです。
これらのイベントを処理するには、次の 2 つの方法があります。
従来の Listenersを使用します。この場合、JFrame で発生する可能性のあるすべてのイベントに対して特定のリスナーを実装する必要があります。
(この場合のように)アダプターを使用するため、この場合は、クラスWindowAdapterを拡張するWindowHandlerという名前の内部クラスを使用します。クラスWindowAdapterには、考えられるすべての JFrame イベントの void メソッドが含まれています。したがって、WindowHandlerでは、すべてのメソッドではなく、処理したいメソッドのみを定義できます。
それは私の推論ですか?それは良いチュートリアルの例ですか、それとも今は見えない問題を示していますか?
TNX
アンドレア