Java 拥有混合JTextField/JPasswordField的简单方法?

Java 拥有混合JTextField/JPasswordField的简单方法?,java,swing,applet,Java,Swing,Applet,我正在开发一个具有simpe登录界面的简单小程序 为了简洁起见,我有两个用于用户名和密码的jtextfield,我也使用它们作为标签。i、 e.首先,用户名JTextField将预先填充灰色文本“username”,密码JTextField将预先填充“simple password” 然后,一旦JTextField获得焦点,我就会清除预填充文本并将文本颜色设置为黑色。类似于stackoverflow的搜索框,但在swing中 现在,为了安全起见,我想在密码JTextField获得焦点时屏蔽密码字

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

为了简洁起见,我有两个用于用户名和密码的jtextfield,我也使用它们作为标签。i、 e.首先,用户名JTextField将预先填充灰色文本“username”,密码JTextField将预先填充“simple password”

然后,一旦JTextField获得焦点,我就会清除预填充文本并将文本颜色设置为黑色。类似于stackoverflow的搜索框,但在swing中

现在,为了安全起见,我想在密码JTextField获得焦点时屏蔽密码字段(当然,首先仍然有预先填充的文本可以阅读)。JPasswordField不允许切换掩码/取消掩码


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

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

一个例子

    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");
            }
        }});
格里茨,
GHad

该类将支持密码字段。

我没有完全阅读javadoc,这对我来说太糟糕了!我查看了它的代码,甚至对其进行了扩展,但从未读过setEchoChar的javadoc!谢谢你,加德!