Неверное состояние JavaFX treeview

#javafx #treeview #observablelist

#javafx #древовидное представление #наблюдаемый список

Вопрос:

У меня ситуация, когда состояние JavaFX TreeView неверно, когда элементы добавляются в корень один за другим, которые можно воссоздать с помощью приведенного ниже кода.

 import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class App extends Application {

    @Override
    public void start(Stage stage) {

        TreeView<String> treeView = new TreeView<>();
        TreeItem<String> root = new TreeItem<>("Root");
        treeView.setRoot(root);
        treeView.setShowRoot(false);
        
        root.getChildren().add(new TreeItem<>("Foo"));
        root.getChildren().add(new TreeItem<>("Bar"));
        root.getChildren().add(new TreeItem<>("Baz"));

        var scene = new Scene(new StackPane(treeView), 640, 480);
        stage.setScene(scene);
        stage.show();
    }

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

Ошибка JavaFX TreeView

Как вы можете видеть, второй элемент имеет синий прямоугольник вокруг него (я думаю, это означает, что элемент сфокусирован). Использование treeView.refresh() or treeView.getFocusModel() , похоже, не проясняет это, однако, как только я взаимодействую с TreeView с помощью клавиатуры и мыши, все исправляется.

Если я изменю приведенный выше код, чтобы заменить три вызова на add с addAll , то при открытии окна ничего не будет выбрано или сфокусировано.

Я заметил, что если корневой узел добавляется к TreeView после того, как все элементы были добавлены к нему, то состояние древовидного представления является согласованным при использовании add или addAll ; В этих случаях первый элемент в TreeView окружен синим прямоугольником.

Кто-нибудь может объяснить разницу в поведении? Это ошибка?

Это было протестировано с использованием версии 15.0.1 JDK и JavaFX.

Комментарии:

1. звучит как ошибка — пожалуйста, сообщите о проблеме, чтобы мы не забыли ее устранить 🙂

2. кстати: нет регрессии — быстрая проверка на fx8, 11, 15: все ведут себя неправильно

3. @kleopatra вы можете сообщить о проблеме? У меня нет учетной записи для добавления проблем в средство отслеживания ошибок OpenJDK.

4. вот оно: bugs.openjdk.java.net/browse/JDK-8256142 — спасибо за вопрос и пример 🙂