1

がどのように機能するかについて、私は非常に混乱していますJButton。JButtonの Oracle ドキュメントを読みましたが、JButtonにアクションリスナーを追加する方法を確認できませんでした。私はいつも、JFrames のようなものがどのようにしてこのようなものを持つことができるのか疑問に思って.addMouseListenerいました。構文 JButtonのように actionListener を追加する方法を説明できる人はいますか?.addActionListener(...)

これを行う方法を知りたい理由は、独自の「JButton」を作成することです。これには、actionListener を追加でき、必要に応じてイベントを発生させることができます。これは可能ですか、それとも不可能ですか?

4

1 に答える 1

3

アーキテクチャを理解するために必要なことは次のとおりです。まず、ここで使用するデザイン パターンはオブザーバー パターンです。

パブリッシャー/サブスクライバー シナリオの実装。パブリッシャー オブジェクトの状態が変わるたびに、サブスクライバー オブジェクトに通知できるメカニズムが必要です。

実装の詳細については、こちらを参照してください

しかし、目的が独自の JButton を作成することである場合、最善の方法は JButton をサブクラス化することです。

class MyCustomButton extends JButton{}

JFrameあなたはどのように持つことができるかについて尋ねましaddMouseListenerた-それJFrameは extendsのためjava.awt.Componentです。お役に立てれば。

編集

オブザーバーは何もしません。何か変化があれば、被験者はオブザーバーに通知します。これが通知方法です。

 public void notify()
      {
        for (int i=0;i < observers.size();i++)
        {
          Observer ob = (Observer)observers.get(i);
          ob.update(newValue);
        }
      }

パケットとバケットの例に戻ります - パケット - オブザーバー バケット - サブジェクト

バケットは、新しいパケットがバケットに入ったパケットを配線します。クラスでは Bucket クラスが notify メソッドを呼び出し、登録されているすべてのパケットに通知されます。Packet が Bucket から自身をサブスクライブ解除したい場合は、Unsubscribe メソッドを呼び出すだけで、Bucket の ArrayList からオブジェクトが削除されます。

于 2012-07-02T03:23:48.380 に答える