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

问题描述 投票:1回答:4

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

应显示为:

*****

***
***

***

请告知

java swing textarea
4个回答
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会更好。但我会留给您改进代码。


0
投票

检查下面的代码是否是您要的内容

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

}

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


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

}
© www.soinside.com 2019 - 2024. All rights reserved.