Java 是否有任何方法可以在运行时屏蔽进入jText区域的值,并在按下backspace时清除内容

Java 是否有任何方法可以在运行时屏蔽进入jText区域的值,并在按下backspace时清除内容,java,swing,textarea,keylistener,Java,Swing,Textarea,Keylistener,我需要在运行时屏蔽进入jText区域的值。我能够做到这一点,但问题是退格的情况。当我按顺序按back space(一个接一个)时,它会工作,而如果我继续按,则它会将事件计数为一个,并仅删除一个字符(通过将按键事件视为一个按键释放) 下面是我的代码片段: public void showPrompt() throws InterruptedException { sem.acquire(); this.toFront(); this.setAlway

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

下面是我的代码片段:

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(".", "*"));
                }
            });
        }

    }

有没有办法,如果我一直按backspace,那么它应该删除所有字符,而不考虑它是一个关键事件?

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

这里,检测退格键笔划的代码写在keyReleased()方法中。现在,keyListener将调用keyReleased()方法,当您将手指从一个键向上拉时,在本例中,您将使用backspace键。这就是为什么即使您一直按backspace键,它也只会执行一次代码,即仅在您释放该键时执行

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


如果将代码移动到keyPressed()方法中,则即使您一直按backspace键,代码也会在每次按键时执行。

您是否想过使用a?如果有人使用Ctrl-V或⌘v如果用户选择所有文本,然后按backspace怎么办?(这就是为什么你应该使用JPasswordField,而不是自己尝试实现它。这个功能比你想象的要复杂。)KeyListener不应该用于这类事情。我不应该使用JPassword。在这里,实际上我只需要用任何字符屏蔽(不需要像密码一样的要求)