2016-04-27 6 views
0

Ich habe 2 Klassen, die erste Klasse ist, wo ich GUI und alle erforderlichen Komponenten erstellen. Einschließlich der Tasten. Dies geschieht außerhalb der Hauptmethode und in eigenen Methoden. Ich möchte .addActionListener, aber von einer anderen Klasse außerhalb dieser. Ich möchte keine inneren Klassen verwenden.Implementieren Sie 2 Klassen für ActionListener für Schaltflächen

Hier sind die Klassen, die Main und die Gui-Komponenten und die Schaltfläche enthalten. Hier

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); 
}** 
} 

ist die Klasse für die Action

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 

} 
} 

Ich möchte nur in der Lage, die AcitonListener Methode aus der zweiten Klasse zu nennen. Ich habe versucht, eine neue Instanz der Klasse zu initiieren und sie aufzurufen, aber ich glaube, ich bin nicht ganz in die richtige Richtung gegangen.

Antwort

1

Ich bin ein wenig verwirrt über das, was Sie fragen. Sie sagte

Ich möchte nur in der Lage sein, die AcitonListener Methode aus der zweiten Klasse zu nennen

Wörtlich genommen bedeutet dies, dass, während Sie innerhalb der PasswordGeneratorButtonHandler Klasse sind, können Sie die actionPerformed() anrufen möchten Methode. Wenn ja, verwenden Sie einfach this.actionPerformed(), wobei this eine special keyword in java ist, die die aktuelle Instanz Ihrer Klasse darstellt.


Wenn Sie jedoch möchten, dass Ihre Handler auf die Schaltfläche, die Sie in der ersten Klasse erstellt hinzufügen, die wie scheint, was Sie tun möchten, dann müssen Sie nur das JButton#addActionListener() Methode aufzurufen.

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); 
} 

Auch innerhalb der PasswordGeneratorButtonHandler Klasse instanziieren Sie eine Instanz der Klasse aufgerufen generate. Dies ist unnötig.

Verwandte Themen