JavaFX:切换到 TextArea 时,将插入符号/光标放在 TextArea 的末尾

标签 javafx textarea changelistener

(在 stackoverflow 上搜索,我看到这个问题是针对 Javascript 而不是针对 JavaFX 的)

我有一个 TextArea,它实际上是类似文字处理器的应用程序中的主要文本编辑器(即,我希望用户在这个 TextArea 中花费大量时间)。当用户使用 Tab 键进入 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());
        }
    }
});

最佳答案

您可以添加 EventHandlerKeyEvent当您按 Tab 时,将插入符号移动到文本的末尾。 key :

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

 node.addEventHandler(KeyEvent.ANY, tabListener);

关于JavaFX:切换到 TextArea 时,将插入符号/光标放在 TextArea 的末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37312792/

相关文章:

JavaFX:将图像插入 GridPane

java - 无法将页面加载到 WebView

javafx - 在运行时 JavaFx 上设置 TextField 提示文本

javafx - JavaFX 应用程序中的 "java.lang.IllegalStateException: Location is not set"

HTML : Is there any way to show images in a textarea?

javascript - 在 javascript 中,如何检查文本区域是否只有一行文本?

javascript - 从文本区域中删除点标记

Java Swing : JButtons and JSliders will not work individually

java - JSpinner 值变化监听器