为按钮为ActionListener实现2个类

时间:2016-04-27 22:44:17

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

1 个答案:

答案 0 :(得分: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的类的实例。这是不必要的。