java - 为按钮的 ActionListener 实现 2 个类

标签 java class actionlistener

我有 2 个类,第一个类是我创建 GUI 和所需的所有组件的地方。包括按钮。这是在主方法之外和各自的方法中完成的。我想要 .addActionListener,但是来自这个类之外的另一个类。我不想使用内部类。

这里是包含 Main 和 Gui 组件以及按钮的类。

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;

public class PasswordGeneratorGui {

private JFrame interfaceFrame;
private JPanel interfacePanel;
private JMenuBar interfaceMenuBar;
private JMenu interfaceMenu;
private JMenuItem interfaceMenuItemFile;
private JButton interfaceButtonGenerate;

public static void main(String[] args) {
    new PasswordGeneratorGui();
}

public PasswordGeneratorGui() {
    createInterfacePanel();
    createInterfaceFrame();
    createInterfaceMenuBar();
    createInterfaceMenu();
    createInterfaceMenuItem();
    createInterfaceButton();

    PasswordGeneratorButtonHandler b = new PasswordGeneratorButtonHandler();

    interfaceFrame.add(interfacePanel);
    interfaceFrame.setVisible(true);
}

public void createInterfacePanel() {
    interfacePanel = new JPanel();
    interfacePanel.setLayout(null);
}

public void createInterfaceFrame() {
    interfaceFrame = new JFrame();
    interfaceFrame.setTitle("Password Generator");
    interfaceFrame.setBounds(50, 50, 700, 400);
    interfaceFrame.setResizable(false);
    interfaceFrame.setJMenuBar(interfaceMenuBar);
}   

public void createInterfaceMenuBar() {
    interfaceMenuBar = new JMenuBar();
    interfaceMenuBar.setBounds(0, 0, 700, 20);
    interfaceMenuBar.setVisible(true);
    interfacePanel.add(interfaceMenuBar);
}

public void createInterfaceMenu() {
    interfaceMenu = new JMenu("File");
    interfaceMenuBar.add(interfaceMenu);
}

public void createInterfaceMenuItem() {
    interfaceMenuItemFile = new JMenuItem("Exit");
    interfaceMenu.add(interfaceMenuItemFile);
}

**public void createInterfaceButton() {
    interfaceButtonGenerate = new JButton("Generate");
    interfaceButtonGenerate.setBounds(0, 358, 700, 20);
    interfaceButtonGenerate.addActionListener();
    interfacePanel.add(interfaceButtonGenerate);
}**
}

这是 ActionListener 的类

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

public class PasswordGeneratorButtonHandler implements ActionListener {

PasswordGeneratorButtonHandler generate = new PasswordGeneratorButtonHandler();

public PasswordGeneratorButtonHandler() {

}

public void interfaceButtonGenerateHandler(ActionEvent event) {
    System.exit(1); 
}

@Override
public void actionPerformed(ActionEvent arg0) {
    // TODO Auto-generated method stub

}
}

我只想能够从第二个类调用 AcitonListener 方法。我尝试启动该类的一个新实例并调用它,但我认为我没有朝着正确的方向前进。

最佳答案

我对你的要求有点困惑。你说

I just want to be able to call the AcitonListener method from the second class

从字面上看,这意味着当您在 PasswordGeneratorButtonHandler 类内部时,您想要调用 actionPerformed() 方法。如果是这样,只需使用 this.actionPerformed(),其中 thisspecial keyword in java ,代表类的当前实例。

<小时/>

但是,如果您想将处理程序添加到您在第一个类中创建的按钮(这似乎是您想要做的),那么您只需调用 JButton#addActionListener()方法。

public PasswordGeneratorGui() {
    createInterfacePanel();
    createInterfaceFrame();
    createInterfaceMenuBar();
    createInterfaceMenu();
    createInterfaceMenuItem();
    createInterfaceButton();

    PasswordGeneratorButtonHandler b = new PasswordGeneratorButtonHandler();
    interfaceButtonGenerate.addActionListener(b); // Add handler to button

    interfaceFrame.add(interfacePanel);
    interfaceFrame.setVisible(true);
}

此外,在 PasswordGeneratorButtonHandler 类中,您可以实例化名为 generate 的类的实例。这是不必要的。

关于java - 为按钮的 ActionListener 实现 2 个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36902247/

相关文章:

Java泛型、类型删除和泛型成员的类型

java 1.6 枚举问题 com.ibm.ws.webservices.engine.enum.Style.WRAPPED

Java - 事件处理和反射(reflect)结果的最佳实践

Java 错误 : Need to declare a variable as final in actionPerformed, 但我需要更改它

java - 从一个线程调用方法到另一个线程在另一个线程中执行

java - 如何通过 Tomcat 使用 Spark 框架运行 WebSockets?

c# - 在 C# 中编写多个构造函数重载的最佳方法

java - Java获取List的具体值

java - 我希望能够 "turn on"视频游戏机,但前提是电视 channel 设置为 3。我该如何执行此操作?

java - ActionListener 未按预期工作