#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();
}
}
Как вы можете видеть, второй элемент имеет синий прямоугольник вокруг него (я думаю, это означает, что элемент сфокусирован). Использование 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 — спасибо за вопрос и пример 🙂