【问题标题】:JtextArea cursor position after keypress of ENTERENTER键后JtextArea光标位置
【发布时间】:2014-09-16 10:17:06
【问题描述】:

我面临的奇怪问题 基本上我有 2 个文本区域...(显示框和文本框)

在文本框中键入时,按下“Enter”的那一刻,我希望在文本框中输入的所有文本都转到显示框...并且文本框应该为空... 一切正常,除了...

文本传输后,文本框的光标位置不在最左上角...它在下面的一行以某种方式闪烁!(可能是因为“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());
    }
}

【问题讨论】:

    标签: java swing jtextarea keylistener key-bindings


    【解决方案1】:

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

    查看Key Bindings 以获取列出所有默认绑定的程序以及How to Use Key Bindings 上的Swinng 教程链接。如果您运行该程序,您会发现Enter 键调用ActionMap 中的"insert-break" 标记所标识的Action。因此,要替换 Action,您可以执行以下操作:

    Action enter = new AbstractAction()
    {
        @Override
        public void actionPerformed(ActionEvent e)
        {
            displayBox.append( textBox.getText() + "\n" );
            textBox.setText("");
        }
    };
    
    textBox.getActionMap().put("insert-break", enter);
    

    使用 KeyListener 的问题在于,在您处理完 KeyEvent 之后仍会调用默认 Action。

    【讨论】:

    • 不错!对我的水平来说有点高......但花时间和理解键绑定似乎很棒......谢谢
    猜你喜欢
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    • 2013-10-26
    相关资源
    最近更新 更多