gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:59:42 25 4
gpt4 key购买 nike

我有 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com