关于java:拥有混合JTextField / JPasswordField的简单方法?

Simple way to have a hybrid JTextField / JPasswordField?

我正在开发一个具有simpe登录界面的简单小程序。

为简洁起见,我有两个用于用户名和密码的JTextField,它们也用作标签。即,首先,用户名JTextField将用灰色文字" \\ username "预先填充,而密码JTextField则用" simple password "预先填充。

然后,一旦JTextField获得焦点,我便清除预填充文本并将文本颜色设置为黑色。与stackoverflow的搜索框类似,但摇摆不定。

为了安全起见,我想在密码JTextField成为焦点时屏蔽密码字段(但是当然,预填充文本仍然清晰可辨)。 JPasswordField不允许切换遮罩/取消遮罩。

在我的简单applet中获得此功能的简单方法有何想法?


您可以使用setEchoChar((char)0);禁用屏蔽回显字符。如JavaDoc中所述。

一个例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    final JPasswordField pass = new JPasswordField("Password");
    Font passFont = user.getFont();
    pass.setFont(passFont.deriveFont(Font.ITALIC));
    pass.setForeground(Color.GRAY);
    pass.setPreferredSize(new Dimension(150, 20));
    pass.setEchoChar((char)0);
    pass.addFocusListener(new FocusListener() {

        public void focusGained(FocusEvent e) {
            pass.setEchoChar('*');
            if (pass.getText().equals("Password")) {
                pass.setText("");
            }
        }

        public void focusLost(FocusEvent e) {
            if ("".equalsIgnoreCase(pass.getText().trim())) {
                pass.setEchoChar((char)0);
                pass.setText("Password");
            }
        }});

Greetz,
GHad


"文本提示"类将支持密码字段。