Java 面对行动的问题
第一次触发按钮操作时,不会打印用户名。第二次按下按钮时,值打印一次。第三次单击时,该值将打印两次。。有人能指出我的错误吗 *这是我的第一个问题,一定要给我一些提示,让我发布更好的问题:D 以下是主要方法:Java 面对行动的问题,java,swing,jframe,actionlistener,Java,Swing,Jframe,Actionlistener,第一次触发按钮操作时,不会打印用户名。第二次按下按钮时,值打印一次。第三次单击时,该值将打印两次。。有人能指出我的错误吗 *这是我的第一个问题,一定要给我一些提示,让我发布更好的问题:D 以下是主要方法: public class DMS implements ActionListener{ private static String username; /** * @param args the command line arguments */ public static void
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);
}
当控件传输到动作侦听器时,您正试图打印初始化期间获得的用户名,该用户名为空 您需要做的是: 在DMS类中保留JTextField的引用 在执行操作时,从组件获取数据。 这将确保您始终获取最新信息
希望能有所帮助。尝试从cmd\u loginActionPerformed中删除此语句,这样就不会在每次发生ActionEvent时调用它
用户名将在DMS对象创建时分配一次
public DMS(JTextField textField1) {
DMS.username = textField1.getText();
}
要从表单中获取最后一个值,我们需要调用getText;从actionPerformedActionEvent方法
由于您尚未显示完整的代码,因此在调用cmd_loginActionPerformed时无法看到该代码,但从所描述的行为来看,似乎每次操作发生时都添加了一个操作侦听器。您只需附加一个操作侦听器,这将修复您的增量打印,并且必须在任何用户操作发生之前完成,即,在初始化时执行此操作,这将修复第一次操作时的非打印问题。我认为这可能是由于每次单击按钮时都会创建新的DMS类。各位,感谢您的回答。我发现我的方法是完全错误的,因为这个按钮目前有两个ActionListener。当主类上的actionListener在cmd_loginActionPerformed(将初始化该值)之前触发时,会出现此问题。请接受最佳答案,或编写自己的答案并接受它。我尝试过此方法,但NetBeans会自动将JTextField设置为private。如何更改?代码的第二部分返回错误,因为textField1在此类中不存在。TextField1位于另一个类a JFrame上。我正在使用netbean创建JFrame。将actionListener添加到构造函数后,值似乎不会传递到主类上。我应该如何更改我的代码?很难确定-请发布一个更好的帮助
public DMS(JTextField textField1) {
DMS.username = textField1.getText();
}
public void actionPerformed(ActionEvent e) {
DMS.username = textField1.getText();
System.out.println(username);
}