2016-04-15 115 views
0

我創建了一個擴展EventButton的類,我稱其爲BirdButton。但是,每個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個按鈕。我需要知道哪些這些創造我eventAction我的下一個類是按鈕本身:

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(); 
     } 
    } 
} 

我如何能得到我的BirdButton類找出哪個按鈕被按下時,不改變驅動程序類?

回答

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