如何通过跳过换行符将文本区域的内容替换为“ *”

时间:2019-11-29 06:25:26

标签: java swing textarea

我有一个要求,我需要在运行时将所有文本替换为“ ”(基本上是屏蔽),并输入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

应显示为:

*****

***
***

***

请告知

4 个答案:

答案 0 :(得分:1)

检查以下代码是否正是您要找的

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
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) {
                       text += String.valueOf(e.getKeyChar());
                       System.out.println(text);
                       jTextArea.setText(text.replaceAll("[a-z]", "*"));
               }

            });
                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();
        }

}

答案 1 :(得分:0)

您的错误是您没有在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会更好。但我会留给您改进代码。

答案 2 :(得分:0)

由于其他两个答案都具有仅替换字母输入的问题,因此忽略了所有数字,特殊字符或空格,我想我也应该补充一下。如果您实际上只想将任何一个字符替换为星号,甚至不必玩RegEx并替换字符,那么您最好在每次调用keyReleased事件时都添加一个星号。

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class App
{
    String displayText = "";
    String valueText = "";

    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(e.getKeyCode() != KeyEvent.VK_ENTER)
                {
                    displayText += "*";
                    valueText += String.valueOf(e.getKeyChar());
                    jTextArea.setText(displayText);
                }
            }

        });
        System.out.println(valueText);
        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();
    }

}

如果您想将输入的值保留在后端,只需将输入的值保存在某个地方,仅显示text

答案 3 :(得分:0)

这是按预期工作的完整代码:

import javax.swing.*;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;

    public class App {
            //String text= "";
        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) {
                    char ch = e.getKeyChar();
                    if (e.getExtendedKeyCode() == KeyEvent.VK_BACK_SPACE) {
                        //System.out.println("It Works Backspace pressed..!");
                    }
                    else {
                    text += String.valueOf(ch);
                    }
                    //System.out.println(e.getKeyChar());
                    jTextArea.setText(text.replaceAll(".", "*"));
                    //jTextArea.setText(text.replaceAll(".[\b]", "*"));
                    //jTextArea.setText(text.toString().replaceAll("[\\b].", "*"));
                }

            });
                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();
        }

}