2014-10-30 108 views
0

我有两个类的困难:程序类和EventHandler类。java。 eventhandler接口

程序类创建两个独立的窗口,一个是“Ground”(带有背景jpg的窗口),另一个窗口具有“add”按钮,它向“Ground”添加一朵花。 “添加”按钮调用它创建类的事件处理程序的对象方法的ActionListener,

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

一切工作正常,但我有困难添加一段代码到事件处理程序,所以当按钮 - 它应该在程序类创建的地面上创建花朵。 我应该如何在对象之间设置这种关联?

谢谢:)

+0

您事件处理程序将需要什么,它需要添加一个引用...考虑提供(和实现)一个接口,描述你的按钮可以做什么(即添加一个流),并将其传递给事件处理程序,而不是不必要地暴露框架/地面 – MadProgrammer 2014-10-30 06:36:34

+0

@markspace但是'EventHandler'是如何设想的将花添加到地面;) – MadProgrammer 2014-10-30 06:37:19

+0

我试图添加代码到EventHandler类中,但是当我按下“添加”按钮时 - 它cr另一个“地面”窗口。据我了解 - 我应该添加对由Program类创建的地面的引用,但它是否允许以某种方式在EventHandler类中执行此操作? – Jaye 2014-10-30 06:40:05

回答

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 { 

} 

这些都是这些接口的物理实现,你可以有任意数量的VenusFlyTrapFlower实现,Rose的,但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)); 
+0

哦,它帮了我很多!但是我没有额外的接口,因为我已经有了一些支持代码。现在我的“添加”按钮用“EventHandler”方法在“Program”类的地面上创建鲜花。 非常感谢您的帮助! – Jaye 2014-10-30 07:10:44