Java actionlistener actionlistener在不同的类中执行

Java actionlistener actionlistener在不同的类中执行,java,class,actionlistener,Java,Class,Actionlistener,我有两个班:主班和一个叫“窗口”的班。 窗口类中有一些按钮,是否可以让“main”类知道发生了什么?简而言之,类“窗口”中的按钮应该触发主类中的一些内容 或者我应该在“窗口”类中键入所有内容吗?是的,这是可能的ActionListener是接口,所以您可以让“main”类实现此接口,并将其作为Windows类构造函数中的参数传递给Windows类。 以下代码片段可以帮助您: 主类: package test; import java.awt.event.ActionEvent; import

我有两个班:主班和一个叫“窗口”的班。 窗口类中有一些按钮,是否可以让“main”类知道发生了什么?简而言之,类“窗口”中的按钮应该触发主类中的一些内容


或者我应该在“窗口”类中键入所有内容吗?

是的,这是可能的
ActionListener
是接口,所以您可以让“main”类实现此接口,并将其作为Windows类构造函数中的参数传递给Windows类。
以下代码片段可以帮助您:

主类:

package test;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Main implements ActionListener
{
    @Override
    public void actionPerformed(ActionEvent e)
    {
        //button clicked, so do you job here

    }
}
package test;

import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JPanel;

public class Window extends JPanel
{
    public Window(ActionListener listener)
    {
        JButton b = new JButton("Button 1");
        b.addActionListener(listener);
        add(b);

        //do other stuff
    }
    public static void main(String[] args)
    {
        Window w = new Window(new Main());
        //continue with initialization process
    }
}
Windows类:

package test;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Main implements ActionListener
{
    @Override
    public void actionPerformed(ActionEvent e)
    {
        //button clicked, so do you job here

    }
}
package test;

import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JPanel;

public class Window extends JPanel
{
    public Window(ActionListener listener)
    {
        JButton b = new JButton("Button 1");
        b.addActionListener(listener);
        add(b);

        //do other stuff
    }
    public static void main(String[] args)
    {
        Window w = new Window(new Main());
        //continue with initialization process
    }
}

你想通知全班吗?与
静态
字段一样?(不要这样做)相反,让你的
Window
对象创建一个
Main
对象并对其进行操作。但是这不就是在Window类中做所有事情吗?是的,所有代码都可以写在同一个文件中,但这不是一个好的设计。最初的问题就是这样发生的,我试图创建一个设计良好的程序。这不是问题,而是解决方案。谢谢你。虽然我的main方法在main类中,但我将“this”传递给了“window”constructor:)