我遇到两个类的困难: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();
一切正常,但我在向事件处理程序添加代码时遇到了困难,因此当按下按钮时 - 它应该在程序类创建的地面上创建花。 我应该如何在对象之间设置这种关联?
谢谢:)
答案 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 {
}
这些是这些接口的物理实现,您可以拥有Flower
,Rose
,VenusFlyTrap
的任意数量的实现,但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));