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