JavaFX TreeItems未正确对齐

时间:2014-01-07 17:36:50

标签: java treeview alignment javafx

我有一个TreeView。 对于此TreeView中的每个项目,如果此TreeItem展开,我会动态添加一堆其他TreeItem。 (通过ChangeListener上的expandedProperty

但是在通过代码自动扩展一些TreeItem之后,它们无法正确对齐,我得到这样的结果:

enter image description here

在向上和向下滚动一点之后,我注意到,有时它会对齐,有时会更糟。

有没有人知道解决方法?还是一个bug?

编辑:

这应该重现代码:

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>(""));
    }
    }

}

1 个答案:

答案 0 :(得分:0)

这段代码完全正常工作。我在Javafx 2.2上测试过它。我想你应该检查你的代码。我在应用程序中使用相当复杂的树视图一年以来,我们从未发现任何缩进问题。