2016-04-15 18 views
0

Ich habe eine Klasse erstellt, die EventButton erweitert, was ich BirdButton nenne. Jedes der BirdButtons wird jedoch in einer separaten Klasse instanziiert. Sie werden als private Variablen instanziiert, aber ich würde gerne wissen, welche meiner BirdButtons gedrückt wurden. Die separate Klasse, Treiber, sieht so aus:Zugriff auf private Variablen

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

Sie können sehen, es erstellt 4 Schaltflächen. Ich muss wissen, welche davon schafft meine eventAction für meine nächste Klasse, die die Schaltfläche selbst ist:

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

Wie konnte ich meine BirdButton Klasse erhalten, welche der Tasten, um herauszufinden, gedrückt wird, ohne dass der Fahrer Klasse zu ändern?

Antwort

0

Sie können das Beobachtermuster verwenden. In diesem Fall kann der BirdButton ein Observer und ein Observable sein. Die folgenden Links würden helfen.

Sie können die folgenden vorhandenen JDK-Objekte verwenden, um das Beobachtermuster für Ihre Anforderungen zu implementieren.

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

Der folgende Link gibt einen Überblick über die Umsetzung Ansatz.

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