Java JTextArea-清除文本并将插入符号返回起始区域
我有个小问题,但很烦人。我使用一个JTextArea通过一个KeyListener捕获输入——它只是在按下返回按钮后捕获输入。问题是,当我清除文本时,插入符号停留在第二行,这很恼人 代码如下:Java JTextArea-清除文本并将插入符号返回起始区域,java,swing,jtextarea,keylistener,Java,Swing,Jtextarea,Keylistener,我有个小问题,但很烦人。我使用一个JTextArea通过一个KeyListener捕获输入——它只是在按下返回按钮后捕获输入。问题是,当我清除文本时,插入符号停留在第二行,这很恼人 代码如下: @SuppressWarnings ("serial") public class ProgramEditor extends JTextArea implements KeyListener { //FIELDS String command = ""; //CONSTRUC
@SuppressWarnings ("serial")
public class ProgramEditor extends JTextArea implements KeyListener {
//FIELDS
String command = "";
//CONSTRUCTOR
public ProgramEditor() {
super();
this.setBorder(BorderFactory.createLineBorder(Color.BLACK));
this.setLineWrap(true);
addKeyListener(this);
this.requestFocus();
}
@Override
public void keyPressed(KeyEvent e) {
int i = e.getExtendedKeyCode();
if (i == 10){
command = this.getText();
this.setText(null);
}
}
}
尝试JTextArea中的
setCaretPosition(int)
方法,特别是将键按入
@Override
public void keyPressed(KeyEvent e) {
int i = e.getExtendedKeyCode();
if (i == 10){
command = this.getText();
this.setText(""); //I'd use "" over null; it just seems more proper to keep a string even if there's no difference
this.setCaretPosition(0);
}
}
检查此项:尝试使用此项:
this.setCaretPosition(0);
Swing使用键绑定来处理事件。对于JTextArea,Enter键由键绑定处理,键绑定将换行符字符串插入文本区域。所以这个代码是在你按下键后执行的
正确的解决方案是将Enter键的默认操作替换为您自己的自定义操作。有关更多信息和示例,请阅读Swing教程中的部分
问题是为什么在用户不能输入换行符的情况下使用JTextArea?更简单的解决方案是只使用JTextField。然后,您可以向文本字段添加ActionListener来处理Enter键
最后,最糟糕的解决方案是尝试处理keyReleased()方法。然后,应该执行文本区域的enter键的默认操作。因为我的输入超过一行。this.requestFocus(true)代码>我很确定这已经被弃用了,如果是这样,编译器将发出警告。不要忽略编译器警告,修复它们!顺便说一句,上面的一些(格式不好的)代码是不必要的,其余的大部分是糟糕的设计或纯粹糟糕的编码。如果你从一个网站上得到了这个例子,就不要再访问那个网站了。这是在教你坏习惯。也许你能告诉我应该怎么做?这可能比把我的工作糟蹋更有用?1)使用DocumentListener
而不是KeyListener
。2) 使用工厂方法制作这样的文本区域比扩展组件要好。3) this.setFocusable(true)代码>是无意义的,因为这是默认值。4) 调用requestFocus()
将失败。(如果它在你的应用程序中被聚焦,那是因为它是第一个聚焦组件)。5) requestFocus(true)代码>应为requestInWindowFocus(true)代码>。6) 如果(i==10){
不使用幻数,则为键定义了常量。7)setText(null)
已包含在答案中。--但这不是代码复查。我想你是在尽力提供帮助,所以…谢谢,我想…那不管用,我不知道为什么…但这是我尝试的第一件事。我尝试了这个。setCaratPosition(1)太-这把克拉放在正确的位置,但它抛出了运行时异常…我使用jText区域与文本换行,因为命令的长度可能非常长,在许多情况下不适合在一行,用户需要能够回顾文本。它本质上是一个宏程序员为一个小动画程序I设计……否则我会使用文本字段——不是吗?我的意思是我考虑过使用JButton而不是return键来获取输入的文本-但是如果有人按下return按钮,那么就不可能再次清除文本区域-这看起来很疯狂。我会阅读关于绑定的部分,看看我是否我能找到解决办法。谢谢。