Swing的输入框仍然分成两类:单行输入框和多行输入框,但与AWT的同类控件相比,它们在若干细节上有所调整。首先说单行输入框,AWT的单行输入框名叫TextField,平时输入什么字符它便显示什么字符,可一旦调用了setEchoChar方法设置回显字符,TextField马上变成只显示密文字符了。然而尴尬之处在于,设置回显字符之后,就没有办法取消原来的回显设置,输入框对象从此只能傻乎乎地显示密文了。如此一来,程序代码难以判断某个输入框究竟会显示明文还是密文,也无法确定输入框文字的加密与否。这不可避免会造成混淆,假设有几个控件都属于TextField类型,程序员怎知哪个是文本框,哪个又是密码框?难道要在浩如烟海的代码中寻找那个该死的setEchoChar方法吗?
鉴于文本框与密码框拥有不同的面貌,并不适合使用同一种类型来表达,故而Swing顺理成章将它俩拆分为两类控件:文本框JTextField与密码框JPasswordField。前者原样展示用户输入的字符,因而取消了回显字符设置方法setEchoChar;后者默认将输入字符显示为一个个圆点,当然程序员也可以调用setEchoChar方法重新设置回显字符。经过这么拆分处理,在Swing中不管输入普通文本还是输入密码,就不必担心弄错的情况了。除此之外,JTextField与JPasswordField的其余方法基本一样,用起来跟AWT的TextField控件差不多。比如下面的代码例子演示了JTextField的调用过程:
JTextField textField = new JTextField(); // 创建一个单行输入框
textField.setEditable(true); // 设置输入框允许