【问题标题】:Implement 2 classes for ActionListener for buttons为按钮的 ActionListener 实现 2 个类
【发布时间】:2016-08-22 11:37:48
【问题描述】:

我有 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 方法。我已经尝试启动该类的一个新实例并调用它,但是我认为我并没有朝着正确的方向前进。

【问题讨论】:

    标签: java class actionlistener


    【解决方案1】:

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

    我只是希望能够从第二个类调用 AcitonListener 方法

    从字面上看,这意味着当您在 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 的类的实例。这是不必要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多