我有一个要求,我需要在运行时将所有文本替换为“ ”(基本上是屏蔽),并输入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
应显示为:
*****
***
***
***
请告知
答案 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]", "*"));
}
但是,这仍然不能处理退格和粘贴之类的内容,更不用说如果text
是StringBuilder
会更好。但我会留给您改进代码。
答案 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();
}
}