JavaFx TextArea更改插入位置问题 - 意外选择了字符

时间:2015-07-06 20:05:04

标签: javafx textarea textfield caret

我一直在尝试在TextArea中设置插入位置,但一直遇到一个奇怪的问题。我试图在达到某个值时改变插入位置。但是出于不明原因不断选择角色。

    ta.setText("123456789123456789");
    ta.caretPositionProperty().addListener((observable, oldValue,
            newValue) -> {
                System.out.println("Caret posistion changed: " +
                        ta.getCaretPosition());
                if (((newValue.intValue() + 1) % 3) == 0) {
                    if (newValue.intValue() > oldValue.intValue()) {
                        ta.positionCaret(newValue.intValue() + 1);
                    } else {
                        ta.positionCaret(newValue.intValue() - 1);
                    }
                }
            });

首次执行代码时,TextArea显示“123456789123456789”,插入位置为0.当我开始插入字符“A”时,它显示“A123456789123456789”,插入位置为1.然后当我继续插入另一个字符“B”,显示“AB123456789123456789”,插入位置为3.这是预期的。但是,意外地选择了第三个字符“1”。这是什么原因,无论如何都要避免这个选择问题?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

锚点是起点,插入符号是选择的终点。当两者相等时,没有选择。您说该问题已在JRE更新中得到修复。但是,解决该错误的一种简单方法是手动将锚点设置为与插入符相同。你可以通过听取文本字段的变化来做到这一点!