JTextField.getText() 和 JPassword.getPassword() 的區別

首先需要知道 JTextField 和 JPassword 的位置:
java.lang.Object
   java.awt.Component
      java.awt.Container
          javax.swing.JComponent
                  javax.swing.JTextField
                      javax.swing.JPasswordField

顧名思義,JTextField處理的是普通文本域,JPasswordField處理的是密碼文本域.
JTextField 的 getText() 是從 JTextComponent類 中繼承而來的,返回String類型.當取得值爲空值的時候,(equals(""))返回爲 true.如:

JTextField nameTextField = new JTextField(10); //表示創建的文本域有10個字符長度
if(nameTextField.getText().equals("")) { //true
     System.out.println("一定能顯示這條語句");
}
JPasswordField 的 getText() 已經過期, 用getPassword() 代替, 返回char[] 數組類型.因爲是char[]類型,其equals方法是來自最原始的Object類, 其相當於"=="(比較兩者的地址是否一致,即指向的內存是否相同).所以永遠都不會相等,即當遇到數組類型時,不能用equals方法來比較.應該把char[] 類型轉化爲String類型(因爲String類型的equals被String類override過,表示對比兩者的內容是否相等).

char[]數組轉變成String類型有兩種方法:
1.nameTextField.getPassword().toString() 
    我們試着去把這打印出來,發現是類似"[C@35ce36"的,即不能提取出來,原因是這裏調用的還是Object的toString方法,它的值遵循這個公式: " getClass().getName() + '@' + Integer.toHexString(hashCode()) ". 所以這個方法不行.
2.String.valueOf( nameTextField.getPassword() ) 
   經過檢驗,發覺這個方法能真實的返回文本框中輸入的字符串.所以此方法work.
   用法:
   if(String.valueOf( nameTextField.getPassword()).equals("")) {
         System.out.println("一定能顯示這條語句");
   }
   注意: 不能用 == "" 來代替 .equals("") , 前者表示比較兩者地址是否相等,後者表示比較兩者內容是否相等.
發佈了23 篇原創文章 · 獲贊 7 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章