目录

我的学习分享

记录精彩的程序人生

JPasswordField 的 getText() 已经过期, 用getPassword() 代替

http://blog.sina.com.cn/s/blog_464790eb0100t6dg.html

顾名思义,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("")
, 前者表示比较两者地址是否相等,后者表示比较两者内容是否相等.