我对两个类有困难:Program 类和 EventHandler 类。
程序类创建两个独立的窗口,一个是“Ground”(背景为 jpg 的窗口),另一个窗口有“add”按钮,可以向“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());
事件处理程序类:
public class Eventhandler implements java.awt.event.ActionListener {
@Override
public void actionPerformed(java.awt.event.ActionEvent e) {
example1.Flower flower;
flower = new example1.Flower();
一切正常,但我在向事件处理程序添加代码时遇到困难,因此当按下按钮时 - 它应该在程序类创建的地面上创建花。 我应该如何设置对象之间的这种关联?
谢谢:)
最佳答案
您需要将某种对象的某种引用传递给您的 EventHandler,您不想做的就是为 EventHandler< 提供更多功能
那么它应该具有,例如,您的添加花事件处理程序应该只能执行此操作,而不是例如向世界放火(或从组件中删除所有内容)。
事件处理程序不需要知道事情是如何发生的,只需知道当它调用某个方法时,它就会知道。
首先创建几个接口(interface),例如......
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
}
这些描述了这些接口(interface)的其他用户的契约,描述了可以从他们那里做什么或获得什么。这是面向对象编程中非常重要的概念。
然后您需要为这些类提供某种实现
public class AFlower extends ... implements Flower {
}
public class SomeGround extends ... implements Ground {
}
这些是这些接口(interface)的物理实现,您可以有任意数量的Flower
、Rose
、VenusFlyTrap
实现,但是地面
不会在意...
现在,为了让您的 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));
关于 java 。事件处理程序接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26646499/