java - 在 JTextArea 中设置插入符位置

标签 java swing listener jtextarea textselection

我有一个 JTextArea。我有一个函数,可以在调用某些组合时选择一定数量的文本。它做得很好。问题是,我想在选择某些文本并按下 VK_LEFT 时将插入符号移动到选择的开头。 KeyListener 实现正确,我用其他方式测试了它。问题是,当我编写以下代码时:

@Override public void keyPressed( KeyEvent e) {
        if(e.getKeyChar()==KeyEvent.VK_LEFT)
            if(mainarea.getSelectedText()!=null)
                mainarea.setCaretPosition(mainarea.getSelectionStart());
    }

并将此监听器的实例添加到主区域,选择一些文本(使用我的函数)并按向左箭头键,插入符号位置设置为选择的末尾......我不会在开头。 .. 怎么了? :S

最佳答案

这是一段代码

    Action moveToSelectionStart = new AbstractAction("moveCaret") {

        @Override
        public void actionPerformed(ActionEvent e) {
            int selectionStart = textComponent.getSelectionStart();
            int selectionEnd = textComponent.getSelectionEnd();
            if (selectionStart != selectionEnd) {
                textComponent.setCaretPosition(selectionEnd);
                textComponent.moveCaretPosition(selectionStart);
            }
        }

        public boolean isEnabled() {
            return textComponent.getSelectedText() != null;
        }
    };
    Object actionMapKey = "caret-to-start";
    textComponent.getInputMap().put(KeyStroke.getKeyStroke("LEFT"), actionMapKey);
    textComponent.getActionMap().put(actionMapKey, moveToSelectionStart);

注意:不建议重新定义通常安装的键绑定(bind),例如 f.i。任何箭头键,用户可能会非常恼火 ;-) 最好寻找一些尚未绑定(bind)的键。

关于java - 在 JTextArea 中设置插入符位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5951428/

相关文章:

java - 如何使用系统默认套接字实现 SocketImplFactory

java - 确定包含来自 Sun bug 数据库的修复的 JRE 版本

java - JTable 的单元格渲染器 - 彩色行

android - 微调器上的监听器

java - Android 应用在 Android 上播放 HTTP Live Stream 时显示 : "Can' t Play This Video.

java - Spring AMQP @RabbitListener 自定义业务错误重试最佳实践

java - 在 Java 中定义新字符 (Android)

java - 您可以通过在后台运行中调用的方法使用发布吗?

java - 调整 JFrame 大小后组件重新定位,并通过拖动鼠标手动调整右上角大小

events - 如何在 FormEvents::PRE_SUBMIT 事件中添加计算字段