在textField(javaFX)中将caretPosition设置在右侧

时间:2019-04-07 20:14:05

标签: javafx textfield caret

我正在开发一个javaFX应用程序,其中用户有几个文本字段需要填充和编辑。我希望如果您通过按TAB键从另一个文本字段跳入来输入新的文本字段,则未选择该文本字段的内容,并且光标也位于右侧。文本字段具有一个事件侦听器,该事件侦听器可以检测它们何时获得焦点,并且我一直在测试API的各种方法,以在输入文本字段时定位光标和取消选择内容。目前,这一切都没有成功。

我的错误在哪里?

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();                   
        }
    }

1 个答案:

答案 0 :(得分:2)

您能否尝试在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());
            });                   
        }
    }
});