java的。 eventhandler接口

时间:2014-10-30 06:32:51

标签: java swing associations eventhandler

我遇到两个类的困难:Program class和EventHandler class。

程序类创建两个单独的窗口,一个是" Ground" (带有背景jpg的窗口)和另一个窗口有"添加"按钮,为#34; Ground"添加一朵花。 "添加"按钮调用方法ActionListener,它创建一个Eventhandler类的对象,

   public  class Program implements Runnable {

    @Override
    //implements interface
    public void run() {
        example1.Ground g;
        g = new example1.Ground();
    // ground object
        javax.swing.JFrame window = new javax.swing.JFrame("windowwithbutton");
        //window (JFRAME)
        javax.swing.JPanel panel = new javax.swing.JPanel();
        //content (JPANEL)
        javax.swing.JButton ab = new javax.swing.JButton("add");
        ab.addActionListener(new eventHandler());

Eventhandler类:

public class Eventhandler implements java.awt.event.ActionListener {


@Override

   public void actionPerformed(java.awt.event.ActionEvent e) {

    example1.Flower flower;
    flower = new example1.Flower();

一切正常,但我在向事件处理程序添加代码时遇到了困难,因此当按下按钮时 - 它应该在程序类创建的地面上创建花。 我应该如何在对象之间设置这种关联?

谢谢:)

1 个答案:

答案 0 :(得分:1)

您需要将某种对象的某种引用传递给EventHandler,您不想做的是为EventHandler提供更多权力然后它应该例如,你的添加花事件处理程序应该只能执行此操作,而不是,例如,设置触发世界(或从组件中删除所有内容)。

事件处理程序不需要知道任何事情发生的事情,只有当它调用某个方法时才会发生。

首先创建几个接口,例如......

public interface Flower {
    // What ever properties you want you flower to have
}

public interface Ground {

    public void add(Flower flower);
    // Other stuff you might like ground to have/do

}

这些描述了与这些界面的其他用户的合同,描述了可以从中完成或获得的内容。这是面向对象编程中非常重要的概念。

然后,您需要为这些类提供某种实现

public class AFlower extends ... implements Flower {

}

public class SomeGround extends ... implements Ground {

}

这些是这些接口的物理实现,您可以拥有FlowerRoseVenusFlyTrap的任意数量的实现,但Ground将无关紧要。

现在,为了让您的EventHandler能够实际执行任何有用的操作,您需要将Ground的实例传递给它,例如......

public class Eventhandler implements java.awt.event.ActionListener {

    private Ground ground;

    public Eventhandler(Ground ground) {
        this.ground = ground;
    }

    @Override
    public void actionPerformed(java.awt.event.ActionEvent e) {
        Flower flower = new AFlower();
        ground.add(flow);
    }

然后,当您创建EventHandler的实例时,您会传递Ground的实例,例如......

example1.Ground g = new SomeGround();
// ground object
javax.swing.JFrame window = new javax.swing.JFrame("windowwithbutton");
//window (JFRAME)
javax.swing.JPanel panel = new javax.swing.JPanel();
//content (JPANEL)
javax.swing.JButton ab = new javax.swing.JButton("add");
ab.addActionListener(new EventHandler(g));