在文本字段中将caretPosition设置为右侧(javaFX)

在文本字段中将caretPosition设置为右侧(javaFX),javafx,textfield,caret,Javafx,Textfield,Caret,我正在开发一个javaFX应用程序,用户可以在其中填充和编辑多个文本字段。我希望,如果您通过按TAB键从另一个文本字段跳转来输入新文本字段,则文本字段的内容不会被选中,并且光标位于右侧。textfields有一个事件监听器,它可以检测何时接收到焦点,我一直在测试API的各种方法,以便在进入textfield时定位光标和取消选择内容,目前所有这些都没有成功 我的错误在哪里 id_ip2B_tf.focusedProperty().addListener(new ChangeListener<

我正在开发一个javaFX应用程序,用户可以在其中填充和编辑多个文本字段。我希望,如果您通过按TAB键从另一个文本字段跳转来输入新文本字段,则文本字段的内容不会被选中,并且光标位于右侧。textfields有一个事件监听器,它可以检测何时接收到焦点,我一直在测试API的各种方法,以便在进入textfield时定位光标和取消选择内容,目前所有这些都没有成功

我的错误在哪里

id_ip2B_tf.focusedProperty().addListener(new ChangeListener<Boolean>() {
    @Override
    public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {

        if (newValue) {
            // 1 - don't work
            id_ip2B_tf.deselect();
            id_ip2B_tf.positionCaret(id_ip2B_tf.getLength());

            // 2 - don't work
            id_ip2B_tf.end();                   
        }
    }
id_ip2B_tf.focusedProperty().addListener(新的ChangeListener()){
@凌驾

public void changed(observeValue您可以尝试在Platform.runLater中包装设置插入符号的逻辑吗

id_ip2B_tf.focusedProperty().addListener(new ChangeListener<Boolean>() {
    @Override
    public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
        if (newValue) {
            Platform.runLater(()->{
              id_ip2B_tf.deselect();
              id_ip2B_tf.positionCaret(id_ip2B_tf.getLength());
            });                   
        }
    }
});
id_ip2B_tf.focusedProperty().addListener(新的ChangeListener()){
@凌驾

public void changed(observeValue您可以尝试在Platform.runLater中包装设置插入符号的逻辑吗

id_ip2B_tf.focusedProperty().addListener(new ChangeListener<Boolean>() {
    @Override
    public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
        if (newValue) {
            Platform.runLater(()->{
              id_ip2B_tf.deselect();
              id_ip2B_tf.positionCaret(id_ip2B_tf.getLength());
            });                   
        }
    }
});
id_ip2B_tf.focusedProperty().addListener(新的ChangeListener()){
@凌驾

public void已更改(observeValueNote您可以简单地执行
Platform.runLater(id\u ip2B\u ft::end)
end
方法将插入符号放置在最后一个字符之后并清除所选内容。@Slaw,感谢您提到这一点。到目前为止还不知道该方法。注意您可以简单地执行
Platform.runLater(id\u ip2B\u ft::end)
end
方法将插入符号放在最后一个字符之后,并清除所选内容。@Slaw,感谢您提到这一点。到目前为止还不知道该方法。该方法应该适用于您,但与您的问题无关:请学习Java命名约定并坚持这些字段(如果不是静态的final),参数和局部变量使用
camelCase
。应该适合您,但与您的问题无关:请学习Java命名约定并坚持使用它们字段(如果不是静态最终值),参数和局部变量使用
camelCase