我有一个带有JButton的FormPanel类,它有一个ActionListener。我也有一个EventObject的子类叫做FormPanelEvent。我的问题是关于ActionListeners的actionPerformed()方法:如果我实例化FormPanelEvent,我传递FormPanel对象或JButton作为源吗?我见过其他人通过"this",但JButton不是真正的源吗?
public class FormPanel extends JPanel {
private JLabel usernameLabel, passwordLabel;
private JTextField usernameField;
private JPasswordField passwordField;
private JButton submitButton, clearButton;
private Collection<FormPanelListener> formPanelListeners = new ArrayList<>();
public FormPanel() {
...
submitButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String username = usernameField.getText().trim();
char[] password = passwordField.getPassword();
FormPanelEvent e = new FormPanelEvent(this or submitButton)
}
});
...
}
这取决于您想如何处理FormPanelEvent
中的FormPanel
。它想要在FormPanelEvent
类中提供完整的功能,然后你可以通过this
,否则如果你想玩源即按钮,那么你可以通过submitButton
。
根据您的代码,submitButton
更有可能是事件的源,因为当您单击该按钮时将引发开始事件。
你需要使提交按钮final
或类的成员字段,以便有一个显式访问它的引用在那个actionListener匿名类
好运。