第一次单击JavaFX时突出显示TextField中的所有文本

第一次单击JavaFX时突出显示TextField中的所有文本,java,javafx,textfield,highlight,Java,Javafx,Textfield,Highlight,如何使我的文本字段JavaFX与上面Google Chrome的搜索栏完全相同。这意味着,如果我点击一次,它会标记所有内容,但如果我再次点击,我就在我点击的地方 例如: 开始: 第一次点击: 再次单击: 编辑 这就是我所尝试的: textField.focusedProperty().addListener((obs, wasFocused, isNowFocused) -> { if (isNowFocused) {

如何使我的文本字段JavaFX与上面Google Chrome的搜索栏完全相同。这意味着,如果我点击一次,它会标记所有内容,但如果我再次点击,我就在我点击的地方

例如:

开始:

第一次点击:

再次单击:

编辑

这就是我所尝试的:

textField.focusedProperty().addListener((obs, wasFocused, isNowFocused) -> {
                if (isNowFocused) {
                    textField.selectAll();
                }
                if (wasFocused) {
                    textField.deselect();
                }
            });
但有了这段代码,当我第一次单击时,所有内容都会被选中,并立即被取消选中。

我会使用MouseeEvent和EventFilter:


您是否尝试将侦听器添加到focused属性,并在获得焦点时选择所有文本?如果不行,试试这个或类似的方法,如果不行,就发一个帖子。这能回答你的问题吗@codeflush.dev不,它没有回答我的问题。我猜默认行为发生在您添加的行为之后,这很奇怪。您可能可以在Platform.runLater中包装对selectAll的调用,但这不是很令人满意。@Gregor是的,我希望如此。但这是一个相当可怕的黑客。
TextField textField = new TextField("This is a test");

textField.addEventFilter(MouseEvent.MOUSE_PRESSED, e -> {
    if (textField.getSelectedText().equals(textField.getText())) {
        textField.deselect();
    } else if (textField.getSelectedText().isEmpty()) {
        textField.selectAll();
        e.consume();
    } 
});