0

私はAとBの2つのクラスを持っています。

クラス A には JTextField と、クラス B のプライベート変数があります。クラス B は ActionListener を実装しています。

クラス A と B は別のファイルにあります。ActionListener を介してクラス B から JTextField にアクセスできますか、または方法がありますか (A にクラス B を含めることができないという要件があります)、アクセスできますか? 私は検索してきましたが、まだ解決策を見つけていません。

御時間ありがとうございます :)

4

2 に答える 2

1

クラスBのactionPerforedメソッドでは、ActionEvent引数を介してイベントのソースにアクセスできます。

public void actionPerformed(ActionEvent e){
    JTextField field = (JTextField)e.getSource();//Now should represent the JTextField in class A
}

その後、JTextFieldでアクションを実行できます。ソースがJTextFieldでない場合は例外がスローされるため、他のコンポーネントのActionListenerとしてクラスBを使用する場合は注意が必要です。

于 2013-03-14T03:31:19.390 に答える
0

event.getSourceを使用して、コンポーネントにアクセスできます。

 public void actionPerformed(ActionEvent evt)
{
  JTextField registeredComponent = (JTextField)evt.getSource(); 
  // dangerous cast required 
}

または、リスナーからさまざまなコンポーネントタイプにアクセスする必要がある場合は、カスタムのオブザーバーパターンの実装を作成できます。

たとえば、ソースコンポーネントのジェネリック型を含むカスタマイズされたEventObject実装。

public void actionPerformed(CustomEvent customEvt)
{
T registeredComponent = customEvt.getSource(); //generic getSource
}

http://en.wikipedia.org/wiki/Observer_patternをご覧ください

于 2013-03-14T08:06:22.653 に答える