0

私は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 つの方法があります。

  1. 従来の Listenersを使用します。この場合、JFrame で発生する可能性のあるすべてのイベントに対して特定のリスナーを実装する必要があります。

  2. (この場合のように)アダプターを使用するため、この場合は、クラスWindowAdapterを拡張するWindowHandlerという名前の内部クラスを使用します。クラスWindowAdapterには、考えられるすべての JFrame イベントの void メソッドが含まれています。したがって、WindowHandlerでは、すべてのメソッドではなく、処理したいメソッドのみを定義できます。

それは私の推論ですか?それは良いチュートリアルの例ですか、それとも今は見えない問題を示していますか?

TNX

アンドレア

4

1 に答える 1