按下ENTER键后的JtextArea光标位置

时间:2014-07-24 17:59:38

标签: java swing jtextarea keylistener key-bindings

我面临着奇怪的问题 基本上我有2个textAreas ...(diplaybox和文本框)

输入文本框时,输入"输入"按下我希望文本框中输入的所有文本都转到显示框...文本框应为空... 一切正常,除了......

文本传输完毕后,文本框的光标位置不在最左侧...它在某一行下面闪烁了一下!(可能是因为" ENTER"仍然被驱逐)...请看代码 任何想法?

提前感谢...只需要光标回到最左边,就像我们开始输入时的情况一样...而不必使用KeyReleased事件...有些感觉不对...我确定这个他实际上是不是已经完成了......说什么?

 public void keyPressed(KeyEvent e)
{
    if(e.getKeyCode() == KeyEvent.VK_ENTER)// | (e.getKeyCode() == KeyEvent.VK_B))
    { //Toolkit.getDefaultToolkit().beep();

    displaybox.append(textbox.getText() + "\n");

    //textbox.setCaretPosition(0);
    //textbox.setText("");
    System.out.println(textbox.getCaretPosition());
    }
}

 public void keyTyped(KeyEvent e)
{}

 public void keyReleased(KeyEvent e)
{
    if(e.getKeyCode() == KeyEvent.VK_ENTER)
    {textbox.setCaretPosition(0);
        textbox.setText("");
        System.out.println(textbox.getCaretPosition());
    }
}

1 个答案:

答案 0 :(得分:2)

所有Swing组件都使用Key BindingsEnter键的默认绑定是向文本区域添加换行符。如果要更改Enter项的功能,请更改默认操作。不要尝试使用KeyListener。

查看Key Bindings以查找列出所有默认绑定的程序以及How to Use Key Bindings上Swinng教程的链接。如果您运行该程序,您会发现Enter键会调用Action中{em>" insert-break" 标记所标识的ActionMap Action }。因此,要替换Action enter = new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { displayBox.append( textBox.getText() + "\n" ); textBox.setText(""); } }; textBox.getActionMap().put("insert-break", enter); ,您可以执行以下操作:

{{1}}

使用KeyListener的问题是在处理KeyEvent之后仍然会调用默认的Action。