java 。事件处理程序接口(interface)

标签 java swing associations eventhandler

我对两个类有困难: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)的物理实现,您可以有任意数量的FlowerRoseVenusFlyTrap实现,但是地面不会在意...

现在,为了让您的 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/

相关文章:

constraints - 三元关联相关的属性

java - 某些 SQL 函数在 HQL 中不起作用

Java 在 2 秒内闪烁 JButton

java - 如何向 JButton 添加两个操作?小费计算器程序

java - 显示 'Loading'帧直到后台进程完成

ruby-on-rails - 如何将属于 "has many :through"一半的项目分配给关联的另一半?

Java3D - 是否有可能有一个跟踪移动对象的查看平台

Java 二进制数语法错误

java - Spring-Data-Jpa AuditingEntityListener createdDate 在保存现有实体时更新

ruby-on-rails - Ruby on Rails 和数据库关联