1

第一次触发按钮(动作)时,不会打印“用户名”。第二次按下该按钮时,将打印一次该值。在第三次单击时,该值被打印了两次。有人可以指出我的错误吗?

*这是我的第一个问题,请提供有关发布更好问题的提示:D

下面是主要方法:

public class DMS implements ActionListener{

private static String username;

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    // TODO code application logic here
    LoginFrame login = new LoginFrame();
    login.setVisible(true);    
}

public DMS(JTextField textField1) {
    DMS.username = textField1.getText();
}

@Override
public void actionPerformed(ActionEvent e) {
    System.out.println(username);
}


}

这是动作监听器,它位于 jframe 中:

private void cmd_loginActionPerformed(java.awt.event.ActionEvent evt) {                                          
    ActionListener actionListener = new DMS(JTextField1);
    someButton.addActionListener(actionListener);
}
4

4 回答 4

0

当控件转移到您的操作侦听器时,您正在尝试打印您在初始化期间获得的用户名 - 这是空的。

你需要做的是:

  1. 在 DMS 类中保留对 JTextField 的引用
  2. 在 actionPerformed() 上,从组件中获取数据。

这将确保您始终获取最新信息。

希望有帮助。

于 2013-10-11T11:21:55.050 回答
0

由于您没有显示完整的代码,因此在调用 cmd_loginActionPerformed 时看不到它,但从所描述的行为来看,您似乎每次发生动作时都在添加一个动作侦听器。您只需附加一次动作监听器(这将修复您的增量打印),并且必须在任何用户操作发生之前完成,即在初始化时执行(这将解决第一次操作时的非打印问题)。

于 2013-10-11T11:26:21.307 回答
0

尝试从中删除此语句,cmd_loginActionPerformed以便每次ActionEvent发生时都不会调用它

someButton.addActionListener(actionListener);
于 2013-10-11T11:23:23.540 回答
0

用户名将在 DMS 对象创建时分配一次。

public DMS(JTextField textField1) {
      DMS.username = textField1.getText(); 
}

要从表单中获取最后一个值,我们需要getText();actionPerformed(ActionEvent e)方法中调用

public void actionPerformed(ActionEvent e) {
    DMS.username = textField1.getText(); 
    System.out.println(username);
}
于 2013-10-11T11:23:27.010 回答