2016-04-27 5 views
0

私は2つのクラスを持っています。最初のクラスはGUIを作成する場所と必要なコンポーネントのすべてです。ボタンを含む。これはメインメソッドの外部で行われており、そこにはそれぞれのメソッドがあります。私は.addActionListenerにしたいが、これ以外のクラスからは。私は内部クラスを使いたくありません。ボタン用のActionListenerの2つのクラスを実装します。

ここには、メインコンポーネントと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); 
}** 
} 

は、私はちょうど第二のクラスからAcitonListenerメソッドを呼び出すことができるようにしたいの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 

} 
} 

ためのクラスです。私はクラスの新しいインスタンスを開始しようとしていると私はかなり正しい方向に行っていないと思うが、それを呼び出す。

答えて

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と呼ばれるクラスのインスタンスをインスタンス化します。これは不要です。

関連する問題