有啥方法可以在运行时屏蔽进入 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 区域中删除视图(按名称)?