加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

JavaFX:当Tabed到TextArea时,将插入/光标放在TextArea的末尾

发布时间:2020-12-15 04:34:20 所属栏目:Java 来源:网络整理
导读:(在stackoverflow上搜索,我看到这个问题针对 Javascript而不是针对JavaFX) 我有一个TextArea实际上是类似文字处理器的应用程序中的主要文本编辑器(即,我打算让用户花费大量时间在这个TextArea中工作).当用户选中TextArea时,我希望将光标放在TextArea的末尾,
(在stackoverflow上搜索,我看到这个问题针对 Javascript而不是针对JavaFX)

我有一个TextArea实际上是类似文字处理器的应用程序中的主要文本编辑器(即,我打算让用户花费大量时间在这个TextArea中工作).当用户选中TextArea时,我希望将光标放在TextArea的末尾,以便用户可以从他们上次输入的内容结束时继续编辑.

我使用ChangeListener(下面的代码)实现了它,它具有所需的行为.但是,由于每次获得焦点时光标都放在TextArea的末尾,那么如果我要切换应用程序然后切换回来,光标就会移动.例如,如果用户在TextArea的中间某处键入句子,切换到阅读电子邮件,然后切换回以找到他们的光标已移动,则这是不方便的.

是否有一个焦点遍历策略执行此操作或以其他方式实现此操作,以便仅当用户选中TextArea时光标才会移动到末尾?在我看来,这通常是所希望的行为:每当TextArea被选中时,光标总是出现在TextArea的末尾,但是否则光标保持不动.

TextArea passageTextArea;

passageTextArea.focusedProperty().addListener(new ChangeListener<Boolean>() {
    @Override
    public void changed(ObservableValue<? extends Boolean> observable,Boolean oldValue,Boolean newValue)
    {
        if (newValue.booleanValue()) {
            passageTextArea.positionCaret(passageTextArea.getText().length());
        }
    }
});

解决方法

您可以为KeyEvent添加一个EventHandler,当您按Tab键时,它会将插入符号移动到文本的末尾:

EventHandler<KeyEvent> tabListener = evt -> {
            if (evt.getCode() == KeyCode.TAB && !evt.isShiftDown()) {
                evt.consume();
                passageTextArea.requestFocus();
                passageTextArea.end();
            }
        };

 node.addEventHandler(KeyEvent.ANY,tabListener);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读