有啥方法可以在运行时屏蔽进入 jText 区域的值,如果一直按下退格键,应该清除内容

Posted

技术标签:

【中文标题】有啥方法可以在运行时屏蔽进入 jText 区域的值,如果一直按下退格键,应该清除内容【英文标题】:is there any way we can mask the value entering into jText area at runtime and should clear the contents if backspace kept pressed有什么方法可以在运行时屏蔽进入 jText 区域的值,如果一直按下退格键,应该清除内容 【发布时间】:2020-04-15 14:09:46 【问题描述】:

我有一个要求,需要在运行时屏蔽输入 jText 区域的值。我能够做到这一点,但问题是退格的情况。当我按顺序(一个接一个)按回空格时,它会起作用,而如果我一直按,它会将事件计数为一个并仅删除一个字符(通过将键事件视为释放一个键)。

这里我的代码 sn-ps 是:

public void showPrompt() throws InterruptedException 
        sem.acquire();
        this.toFront();
        this.setAlwaysOnTop(true);
        this.setVisible(true);
        if(encryptKeystroke == true) 
            jTextArea.addKeyListener(new KeyListener() 
                public void keyTyped(KeyEvent e) 
                

                public void keyPressed(KeyEvent e) 
                

                public void keyReleased(KeyEvent e) 

                    if (e.getExtendedKeyCode() == KeyEvent.VK_BACK_SPACE) 
                        text = text.substring(0, text.length() - 1);
                    
                    else 
                        text += String.valueOf(e.getKeyChar());
                    
                    jTextArea.setText(text.replaceAll(".", "*"));
                
            );
        

    

如果我一直按退格键,有什么办法可以删除所有字符,而不管它是一个关键事件吗?

【问题讨论】:

您是否考虑过使用JPasswordField ? 如果有人使用 Ctrl-V 或 ⌘V 粘贴文本,您的代码会做什么?如果用户选择所有文本然后按退格键会怎样? (这就是为什么你应该使用 JPasswordField 而不是自己尝试实现它的原因。这个功能比你想象的要复杂。) KeyListener 不应该用于这种事情。 我不应该使用 JPassword。在这里实际上我只需要用任何字符进行掩码(不需要完全像密码那样的要求) 【参考方案1】:

正如您在评论中所说,要求与密码不完全一样,因此您不会使用 JPasswordField,我想为这个问题提供一个解决方案。

这里,检测退格键击的代码写在 keyReleased() 方法中。现在,keyListener 将调用 keyReleased() 方法,当您将手指从某个键(在本例中为退格键)上拉时。这就是为什么即使你连续按下退格键,它也只会执行一次代码,即只有当你松开键时。

现在,您希望每次按下退格键 时删除一个字符,这样您就可以将代码从 keyReleased() 方法移动到 keyPressed() 方法。

如果你在 keyPressed() 方法中移动代码,那么即使你一直按住退格键,每次击键都会执行代码。

【讨论】:

以上是关于有啥方法可以在运行时屏蔽进入 jText 区域的值,如果一直按下退格键,应该清除内容的主要内容,如果未能解决你的问题,请参考以下文章

当使用 RegionManager.RequestNavigate 方法添加视图时,有啥方法可以从 Prism 区域中删除视图(按名称)?

如何屏蔽硬盘的坏扇区、磁道?谢谢!

你认为SSID、BSSID、ESSID有啥区别?

Python有啥方法可以改变运行中程序的某个变量而不中断执行?

Java运行时数据区域

JAVA - JVM - 运行时区域