Первая строка всегда выбирается при фокусировке TableView или TreeView в приложении JavaFX

Я понял, что все tableViews и treeViews в моем приложении JavaFX выбирают первую строку, как только они фокусируются. В результате, даже когда я нажимаю на соответствующую полосу прокрутки, будет выбран первый ряд. Поскольку я, конечно, не хочу иметь такое поведение, я хотел бы спросить, есть ли способ избежать этого поведения?

РЕДАКТИРОВАТЬ: я добавил простой пример, который создает два скромных списка. Здесь, как только вы нажимаете на пустую строку, выбирается первая строка.

РЕДАКТИРОВАТЬ 2: Добавил два маленьких слушателя к коду, так что проблема повторяется без перезапуска приложения.

package testlistview;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ListView;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;

public class TestListView extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        HBox root = new HBox();
        root.setSpacing(10);

        Scene primaryStageScene = new Scene(root);
        primaryStage.setScene(primaryStageScene);

        ListView<String> l1 = new ListView();
        l1.getItems().addAll("a", "b", "c", "d", "e", "f", "g");
        ListView<String> l2 = new ListView();
        l2.getItems().addAll("1", "2", "3", "4", "5", "6", "7");
        root.getChildren().addAll(l1, l2);

        l1.setOnMouseClicked((MouseEvent e) -> {
            l2.getSelectionModel().clearSelection();
        });

        l2.setOnMouseClicked((MouseEvent e) -> {
            l1.getSelectionModel().clearSelection();
        });

        primaryStage.show();
    }
}

РЕДАКТИРОВАТЬ 3: Я понял, что первый ряд также выбирается, когда я сортирую таблицу. Однако, чтобы избежать этого, я создал небольшой хак (что, вероятно, очень плохой стиль, но пока работает).

  private boolean sorted = false;

// (...)

    tableView.addEventFilter(MouseEvent.MOUSE_PRESSED,
                            new EventHandler<MouseEvent>() {
                                public void handle(MouseEvent e) {
                                    if (!tableView.isFocused()) {
                                        if (e.getPickResult().getIntersectedNode() instanceof Label) {
                                            sorted = true;
                                        }

                                    }
                                }
                            ;
                    });

    tableView.focusedProperty().addListener((a,b,c) -> {
                if(!tableView.isPressed() || sorted) {
                    tableView.getSelectionModel().clearSelection();
                    sorted = false;
                }
            });

Поэтому здесь eventFilter активируется перед слушателем. Насколько я вижу, только заголовок является экземпляром Label. В результате при каждом первом щелчке по заголовку выбор очищается.

Однако, как обсуждалось в посте ниже, я думаю, ошибка исчезнет со следующим выпуском Java.

Ответы на вопрос(2)

Ваш ответ на вопрос