2016-04-27 78 views
0

我有2個類,第一個類是我創建GUI和所需的所有組件的位置。包括按鈕。這是在主要方法之外完成的,並且有各自的方法。我想要.addActionListener,但是來自這個之外的另一個類。我不想使用內部類。爲ActionListener按鈕實現2個類

這裏是包含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

我對你的要求有點困惑。你說

我只是希望能夠從第二類調用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類的一個實例。這是不必要的。