在Java Swing桌面應用程序中。我有許多較小的類,所有這些都是在總體應用程序類中使用的。其中一個較小的類是代表我的登錄頁面的JPanel。我添加了一個MouseListener的這個頁面上的登錄按鈕,即進入這樣的:變量在同一範圍內調用時會產生多個值java
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
}
}
當我運行的代碼,在用戶名文本框輸入一個名稱,並點擊登錄,輸入名稱和真實值的capturedName布爾是兩者都印有,但
if (display.loginPage.capturedName)
條件從未滿足。另外,當我添加打印display.loginPage.username時,我得到一個空值。什麼可能是相同的值之間的這種差異的原因?
對你的建議(與你的問題無關):類名「loginPage」不是一個好的選擇。將其重命名爲「LoginPage」。這是一個Java類約定,以大寫字母開頭,變量以小寫字母開頭。如果你遵循這個約定,你的代碼更容易讓其他人理解。 – EJK
要獲得更好的幫助,請考慮創建併發布[最小,完整和可驗證示例程序](http://stackoverflow.com/help/mcve)。我們不希望看到你的整個程序,而是你應該將你的代碼壓縮到仍然編譯的最小的代碼中,沒有額外的代碼與你的問題無關,但仍然表明你的問題。順便說一句,你永遠不會想要像使用JButton一樣使用MouseListener。而是使用一個ActionListener,就像它爲其構建的那樣。 –