【问题标题】:Accessing Private Variables访问私有变量
【发布时间】:2016-04-15 01:53:15
【问题描述】:

我创建了一个扩展 EventButton 的类,我称之为 BirdButton。但是,每个 BirdButtons 都在一个单独的类中实例化。它们被实例化为私有变量,但我想知道我的哪个 BirdButtons 被按下了。单独的类 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();
         }
    }
}

如何在不更改 Driver 类的情况下让 BirdButton 类确定按下了哪个按钮?

【问题讨论】:

    标签: java private actionevent


    【解决方案1】:

    您可以使用观察者模式。在这种情况下,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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-25
      • 2012-05-09
      • 2018-11-02
      • 1970-01-01
      • 1970-01-01
      • 2015-11-14
      • 2011-03-02
      • 1970-01-01
      相关资源
      最近更新 更多