我面临着奇怪的问题 基本上我有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());
}
}
答案 0 :(得分:2)
所有Swing组件都使用Key Bindings
。 Enter
键的默认绑定是向文本区域添加换行符。如果要更改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。