"用户名"第一次触发按钮(动作)时不会打印。第二次按下该按钮时,该值打印一次。在第三次点击时,该值打印出两次。有人可以指出我的错误吗?
*这是我的第一个问题,请提供有关发布更好问题的提示: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);
}
答案 0 :(得分:0)
当控件转移到您的动作侦听器时,您正在尝试打印初始化期间获得的用户名 - 这是空的。
您需要做的是:
这将确保您始终获取最新信息。
希望有所帮助。
答案 1 :(得分:0)
尝试从cmd_loginActionPerformed
删除此语句,以便每次ActionEvent
发生时都不会调用此语句
someButton.addActionListener(actionListener);
答案 2 :(得分: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);
}
答案 3 :(得分:0)
由于您没有显示完整的代码,因此在调用cmd_loginActionPerformed时无法看到它,但是根据所描述的行为,您似乎每次发生操作时都会添加一个动作侦听器。您只需要附加一次动作侦听器(这将修复您的增量打印),并且必须在任何用户操作发生之前完成,即在初始化时执行(这将修复非打印) 第一次操作)问题。