我有一个要求,需要在运行时将所有文本替换为“”(基本上是屏蔽),并输入jtextArea。意思是说我将密钥存储到textArea中显示为“”的变量中。
得到了如下代码:

public class App {
            String text= "";
            App(){
                JFrame f= new JFrame();
               // final JTextArea area=new JTextArea();
                JTextArea jTextArea=new JTextArea();

                jTextArea.addKeyListener(new KeyListener() {
                public void keyTyped(KeyEvent e) {

                }

                public void keyPressed(KeyEvent e) {

                }

                public void keyReleased(KeyEvent e) {
                   if(Character.isLetter(e.getKeyChar())) {
                  System.out.println(text);
                     //text = text + e.getKeyChar();
                       text += String.valueOf(e.getKeyChar());
                       System.out.println(text);
                       jTextArea.setText(text.replaceAll("[a-z]", "*"));
                   }
                   //System.out.println(text);
               }

            });
                System.out.println(text);
            jTextArea.setBounds(10,30, 200,200);
            jTextArea.setAutoscrolls(true);
            f.add(jTextArea);
            f.setSize(300,300);
            f.setLayout(null);
            f.setVisible(true);
        }
        public static void main(String args[])
        {
            new App();
        }

}


这里的问题是它也转换了我的“新行”并将其添加到第一行本身。

我的要求是:

输入:

Hello

how
are

you


应显示为:

*****

***
***

***


好心提醒

最佳答案

您的错误是您没有在text变量后面添加换行符,这意味着text总是有字母,但没有换行。由于您将文本字段的文本设置为text,因此text也应具有这些换行符。

您应该只删除if语句,因为正则表达式[a-z]replaceAll调用中已经对检查进行了“完成”。

public void keyReleased(KeyEvent e) {
    text += String.valueOf(e.getKeyChar());
    jTextArea.setText(text.replaceAll("[a-z]", "*"));
}


但是,这仍然不能处理退格和粘贴之类的内容,更不用说textStringBuilder会更好。但是我会留给您改进代码。

09-26 19:56
查看更多