2016-04-15 17 views
0

私はBirdButtonと呼ばれるEventButtonを拡張するクラスを作成しました。ただし、各BirdButtonは別のクラスでインスタンス化されます。これらはプライベート変数としてインスタンス化されていますが、どのBirdButtonが押されたか知りたいと思います。別クラスDriverは次のようになります。プライベート変数へのアクセス

import javax.swing.JFrame; 
import javax.swing.JTextField; 
public class Driver { 
    private JFrame win; 
    private Animals animals = new Animals(); 
    private BirdButton nextBtn, enlargeBtn, shrinkBtn, moveToBtn; 
    private JTextField field; 

    public Driver() { 
     win = new JFrame("Angry Animal Name Game"); 
     win.setBounds(100, 100, 600, 600); 
     win.setLayout(null); 
     win.setVisible(true); 
     nextBtn = new BirdButton("NEXT", 10, 10, animals); 
     win.add(nextBtn, 0); 
     enlargeBtn = new BirdButton("ENLARGE", 10, 60, animals); 
     win.add(enlargeBtn, 0); 
     shrinkBtn = new BirdButton("SHRINK", 10, 110, animals); 
     win.add(shrinkBtn, 0); 
     field = new JTextField(); 
     field.setBounds(10, 250, 100, 20); 
     win.add(field, 0); 
     moveToBtn = new BirdButton("MOVETO", 10, 275, animals, field); 
     win.add(moveToBtn, 0); 
     win.add(animals, 0); 
     animals.recenter(); 
     win.repaint(); 
    } 
} 

4つのボタンが作成されています。私はドライバーのクラスを変更せずに、押されたボタンのどれを把握するために私BirdButtonクラスを得ることができますどのように

import java.awt.event.ActionEvent; 
import javax.swing.JTextField; 
public class BirdButton extends EventButton { 
    String a; 
    public BirdButton(String n, int x, int y, Animals a, JTextField field){ 
     super(n); 
     setLabel(n); 
     setBounds(x,y,100,30); 
     a = a; 
    } 

    public BirdButton(String n, int x, int y, Animals a) { 
     this(n, x, y, a, null); 
    } 

    public void actionPerformed(ActionEvent e) { 
     if (e.getSource() == Driver.nextBtn){ 
      animals.goToNext(); 
     } 
    } 
} 

:私は、ボタン自体が私の次のクラスのための私のeventActionを作成し、これらのかを知る必要がありますか?

答えて

0

オブザーバーパターンを使用できます。この場合、BirdButtonはObserverとObservableになります。以下のリンクが役立ちます。

以下の既存のJDKオブジェクトを使用して、要件にオブザーバーパターンを実装することができます。

https://docs.oracle.com/javase/7/docs/api/java/util/Observer.html https://docs.oracle.com/javase/7/docs/api/java/util/Observable.html

次のリンクは、実装アプローチの概要を説明します。

http://www.java2s.com/Code/Java/Design-Pattern/AsimpledemoofObservableandObserver.htm

関連する問題