TreeView가 있습니다. 이 TreeView
의 모든 항목에이 TreeItem
이 확장되면 다른 TreeItems를 동적으로 추가합니다. (를 통해 ChangeListener
expandedProperty
에) JavaFX TreeItem이 올바르게 정렬되지 않았습니다.
그러나 코드를 통해 자동으로 일부 TreeItems을 확장 한 후
, 그들은 늘 올바르게 정렬 얻을, 나는 이런 식으로 뭔가 얻을 : 위로 스크롤 한 후와 조금 아래로을 , 나는 때때로, 그것은 맞았고 때로는 더 나 빠졌다는 것을 알았다.
해결 방법을 알고 계십니까? 또는 버그입니까?
편집 :이 코드는 완벽하게 정상적으로 잘 작동
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.Scene;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class TreeViewTest extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stg) throws Exception {
final TreeView<String> tree = new TreeView<String>();
TreeItem<String> root = new TreeItem<String>("Root");
genChilds(root, 50);
tree.setRoot(root);
BorderPane pane = new BorderPane();
pane.setCenter(tree);
TreeItem<String> leaf = root;
for(int j = 0; j < leaf.getChildren().size() && leaf.getChildren().size() != 0; j++){
System.out.println("b");
if(Math.random() < 0.5){
leaf = leaf.getChildren().get(j);
leaf.setExpanded(true);
tree.getSelectionModel().select(leaf);
}
}
stg.setScene(new Scene(pane));
stg.show();
}
protected int depth(TreeItem<String> selectedItem) {
return 0;
}
private void genChilds(final TreeItem<String> leaf, final int count) {
for(int i = 0; i < count; i++){
final int nr = i;
leaf.getChildren().add(new TreeItem<String>("" + i));
leaf.getChildren().get(i).expandedProperty().addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<? extends Boolean> arg0, Boolean arg1, Boolean newV) {
if(newV){
leaf.getChildren().get(nr).getChildren().remove(0);
genChilds(leaf.getChildren().get(nr), count-1);
}else{
leaf.getChildren().get(nr).getChildren().clear();
leaf.getChildren().get(nr).getChildren().add(new TreeItem<String>(""));
}
}
});
//End at some Point
if(count-1 > 0)
leaf.getChildren().get(i).getChildren().add(new TreeItem<String>(""));
}
}
}
사용중인 JavaFX의 버전은 무엇입니까? 문제를 재현하는 간단한 예제를 게시 할 수 있습니까? – assylias
현재 JFX 2.2를 사용하고 있습니다. – nZeloT
이상한 점 : 현재이 문제에 직면하고 있으며 샘플 코드로 재생산 할 수 없습니다. 귀하가 제공 한 코드는 나를 위해 문제를 재현하지 않습니다. 지금까지 이것에 대한 해결책을 찾았습니까? – geisterfurz007