【发布时间】:2015-02-19 00:21:22
【问题描述】:
在 Java Swing 桌面应用程序中。我有许多较小的类,所有这些都在一个总体应用程序类中使用。其中一个较小的类是代表我的登录页面的 JPanel。我在此页面上的登录按钮中添加了一个鼠标侦听器,如下所示:
Public class loginPage extends JPanel{
String username;
boolean capturedName=false;
JTextField nameField;
...
loginButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
username = nameField.getText();
capturedName=true; //for redundant checking of mouse click event
System.out.println(username); //error checking
System.out.println(capturedName); //error checking
}
});
}
在代表我的 JFrame 的单独显示类中,我将登录页面设置为该类的属性,并在将登录页面添加到其中后,在我的应用程序类中实例化此显示类。我正在尝试在 App 类中捕获登录页面用户名 attr 并将其传递给其他方法。但是当我运行代码并点击登录按钮时,文本框中的值没有被捕获。
为了错误检查,我尝试了ff:
//Set login page GUI up
while(display.loginPage.username==null){ //this is initially true
if (display.loginPage.capturedName){ //boolean to check if button has been clicked
display.loginPage.username=display.loginPage.nameField.getText(); //intentional redundancy
String username=display.loginPage.username;
System.out.print(username);
//pass username to other methods
}
}
当我运行代码时,在用户名文本字段中输入一个名称,然后单击登录,输入的名称和 captureName 布尔值的真实值都会打印出来,但是
if (display.loginPage.capturedName)
条件永远不会满足。此外,当我添加 print display.loginPage.username 时,我得到一个空值。相同值之间出现这种差异的原因可能是什么?
【问题讨论】:
-
给你的建议(与你的问题无关):类名“loginPage”不是一个好的选择。将其重命名为“登录页面”。 Java 约定类名以大写字母开头,变量以小写字母开头。如果你遵循这个约定,你的代码更容易被其他人理解。
-
要获得更好的帮助,请考虑创建并发布Minimal, Complete, and Verifiable Example Program。我们不想看到你的整个程序,而是你应该将你的代码压缩成仍然可以编译的最小部分,没有与你的问题无关的额外代码,但仍然可以证明你的问题。顺便说一句,您永远不会想要像您正在做的那样使用带有 JButton 的 MouseListener。而是使用 ActionListener,因为它就是为此而构建的。
标签: java swing jbutton mouselistener