0

リスナー、レンダラー、またはエディターを実装する場合、メソッド内でJavaが自動的に呼び出す方法は?

コード:

Class A implements ActionListener{
   A(){
    //bla bla
    //bla bla 
    this.addActionListener(btn);

   }
   public void actionPerformed(ActionEvent e){**// How actionPerformed method called        //automatically if we register button**

   }
}

ボタンオブジェクトを登録した後、その呼び出しactionPerformedメソッドはどのように自動的に実行されますか?btnオブジェクトをaddActionListener(btn)に渡すだけです。そのメソッドの呼び出しの内部はどうですか?

メソッド内のnetbeansをチェックしましaddActionListenerた*。メソッドの呼び出しメソッドactionPerformedありません。また、登録すれば動作し続けます。スレッド内のどこかで呼び出していますか?しかし、私はソースコードをチェックしました。何もありません。どのように?

4

4 に答える 4

3

イベントはEventListenerList、親が所有するからディスパッチされ、 APIで概説され、ここで説明さJComponentれている規則を使用します。エディターとレンダラーは、所有するビュー コンポーネントによって呼び出されます。

補遺:そのままのインターフェースを作成できますか? どのように?

はい、JFreeChartかなりアクセスしやすい例です。グラフ自体は ではありませんが、独自のイベントに同じモデルJComponentを使用します。

于 2012-08-28T05:26:17.853 に答える
2

Java では、Windows コンポーネントで発生するすべてのことがEvent Dispatcher Threadによって処理されます。

イベント ディスパッチ スレッド (EDT) は、Abstract Window Toolkit (AWT) グラフィカル ユーザー インターフェイス イベント キューからのイベントを処理するために Java で使用されるバックグラウンド スレッドです。これらのイベントは主に、ユーザー インターフェイス コンポーネント自体を再描画させる更新イベント、またはマウスやキーボードなどの入力デバイスからの入力イベントです。

イベントをクリックまたは実行するたびに、アクション リスナーを開始するのは EDT です。そのため、アクション リスナーで何かThread.sleepを実行すると、最終的に一定期間 UI がフリーズします。

クラスは特定のインターフェイスを実装するため、クラスは、EDT が必要なことを行うために使用できる一連のメソッドを持つことを EDT に保証します。

EDT の詳細については、このOracle ドキュメントをご覧ください。

于 2012-08-28T05:26:09.477 に答える
2

魔法です。

イベント処理はAWTAPI によって処理されます。これらのイベントはキューに入れられ、さまざまなコンポーネントにディスパッチされます (一連の手順を経て)。次に、関心のある各当事者は、関心のある要求を処理してから、食物連鎖を渡ってあなたに届きます。

問題は、気にする必要があるかどうかです。

いくつかの点ではそうですが、電気がどのように機能するか、または電気のスイッチをオンにできるかだけを気にしますか?

より良いドキュメントがあると確信していますが、初心者向けにhttp://docs.oracle.com/javase/1.3/docs/guide/awt/designspec/events.htmlをご覧ください...

于 2012-08-28T05:28:04.843 に答える
1

アクションが発生すると、Swing は ActionListener を自動的に呼び出します。実際のメソッド呼び出しは、Swing のソース コードの奥深くにあります。

于 2012-08-28T05:23:15.467 に答える