2

我正在用 Java 开发一个系统(使用 NetBeans),为了让它更“专业”,我添加了一些很酷的功能,比如占位符(是的,我知道,它来自 HTML)。

对于我拥有的所有JTextField,我使用以下代码生成它们的占位符(本示例中 JTextField 的名称是“tfUser”):

private void tfUserFocusGained(java.awt.event.FocusEvent evt) {
    if (tfUser.getText().equals("Your User Name...")) {
        tfUser.setText("");
        tfUser.setForeground(Color.BLACK);
    }
}

private void tfUserFocusLost(java.awt.event.FocusEvent evt) {                                    
    if (tfUser.getText().equals("")) {
        tfUser.setText("Your User Name...");
        tfUser.setForeground(Color.GRAY);
    }
}

这是一个“焦点匹配”:文本字段最初具有文本“您的用户名...”,前景为“灰色”。每次此文本字段获得焦点时,它都会验证其文本:如果 text.equals("Your User Name..."),则其文本设置为“”(空字符串)并且前景设置为黑色(默认)。另一方面,如果 text.equals("Anything else..."),则意味着用户可能已经插入了用户名,因此,不要对这段代码做任何事情。

每次文本字段失去焦点时,它都会验证其文本:如果 text.equals("") (又是一个空字符串),则其文本设置回“您的​​用户名...”并且前景设置为灰色的。再一次,如果 text.equals("Anything else..."),这意味着用户可能已经插入了用户名,所以不要对这段代码做任何事情。

此代码与 JTextFields 完美配合,但是,当我对JPasswordFields执行相同操作时,我得到以下结果:

****************  

(应该是“您的密码...”)

谁能帮我在这个 JPasswordField 中添加一个占位符?提前致谢。

4

1 回答 1

2

我为我的登录代码所做的是添加一个“显示密码”复选框,并在 jframe 中添加了以下语句:

//Setting checkbox selected to true so the word "password" is seen when program runs
 passCheckBox.setSelected(true);
    if(passCheckBox.isSelected())
    {
        PasswordField.setEchoChar((char)0);
    }`

密码复选框代码:

if(passCheckBox.isSelected())
        {
            PasswordField.setEchoChar((char)0);
        }else{
            
            PasswordField.setEchoChar('*');
        }

获得密码字段焦点的代码:

private void PasswordFieldFocusGained(java.awt.event.FocusEvent evt) {                                          
    passCheckBox.setSelected(false);
    PasswordField.setEchoChar('*');
    String password = String.valueOf(PasswordField.getPassword());
    
    if(password.toLowerCase().equals("password"))
    {
        PasswordField.setText("");
        PasswordField.setForeground(Color.black);
    }
    
}     

 

密码字段焦点丢失的代码:

private void PasswordFieldFocusLost(java.awt.event.FocusEvent evt) {                                        
     
    String password = String.valueOf(PasswordField.getPassword());
    
    
    if(password.toLowerCase().equals("password") || password.toLowerCase().equals("") )
    {
        PasswordField.setText("Password");
        PasswordField.setEchoChar((char)0);
        PasswordField.setForeground(new Color(153, 153, 153));
    }
}                

我自己做了一半,并从视频中提取了一些片段,希望对您有所帮助:>

于 2021-04-22T14:59:50.787 回答