Java在不相关的类之间创建事件

Java在不相关的类之间创建事件,java,events,Java,Events,您好,我想知道创建链接两个不相关类的事件的最简单或不太扭曲的方法 假设我有以下方案:a->b意味着a包含b class ZeroThing extends JPanel container1 -> class FirstThing extends JPanel container1.1 -> JProgressBar bar -> JButton but -> class SecondThing extends JPanel container1

您好,我想知道创建链接两个不相关类的事件的最简单或不太扭曲的方法

假设我有以下方案:a->b意味着a包含b

class ZeroThing extends JPanel container1 
  -> class FirstThing extends JPanel container1.1
    -> JProgressBar bar
    -> JButton but
  -> class SecondThing extends JPanel container1.2
    -> JLabel lab1
    -> JLabel lab2
我想一封信,以自动添加到lab2每次按钮,但被按下。 将but的事件链接到lab2的最简单方法是什么

编辑:我想做什么:

but.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
    lab2.setText("Hello");  
    }
});

这无法工作,因为but是第一个类中包含的JButton,而lab2是第二个类中包含的JLabel。如何绕过这种情况?

您应该在这里考虑模型-视图-控制器MVC设计

在这种情况下,标签是视图,按钮是控制器,您还没有定义模型,但您应该这样做

模型包含要更改的数据。当按下按钮时,它会调用模型上的一些set方法,甚至是addLetter之类的东西

当模型接收到数据更改时,它应该向侦听模型的所有视图触发事件。这意味着模型还需要addModelListener和removeModelListener,以及一个FireLetterAddString-letter方法,该方法在已添加到模型的所有LetterListener上调用一个方法,如LetterAddString-letter

当然,这意味着您需要创建一个具有LetterAddString letter方法的LetterListener接口,第二个类实现了LetterListener并将自己添加到模型中

这是实现MVC的一个非常快速的概述,我已经略过了一些东西。但这就足够开始了吗?

既然您询问了最简单的方法,那么下面是一种实现类之间紧密耦合的方法,因此它非常难看:

首先,创建一个公共方法SetLab2Text。。。。 在SecondThing中,创建一个类变量来保存对FirstThing实例的引用:FirstThing ft=new FirstThing;它假设Firsthing的默认构造函数只初始化类变量,不实现任何GUI内容。 在您的ActionListener中,添加ft.SetLab2TextHello;
同样,这只是一种快速而肮脏的完成任务的方法,并不代表一种好的设计。

最简单但不是最好的方法是将Class1的实例传递给Class2中的ActionListener。然后在ActionListener中,您可以使用一组。。。方法更新标签。这将创建一个相当紧密耦合的配置?根据我的模式,但无法访问lab2:SY,您需要澄清您的问题。在您的案例中,哪些是不相关的类?不相关是指来自不同的软件包吗?好的,我编辑了我的帖子。我忘了提到JButton是第一个类的一部分,而我的标签是第二个类的一部分。基本上他们没有一个能接触到另一个…仍然不清楚。ZeroThing的第一个和第二个内部类是什么?谢谢David。对于像我这样的初学者来说,这还不足以实现它,但这正是我需要的信息!我正在读一本关于MVC设计的教程:谢谢你,PM。与MVC设计相比,这确实是一种肮脏的方式,但是这不会是一个问题,因为我的项目非常小且整洁: