JavaFX树项未正确对齐

JavaFX树项未正确对齐,java,treeview,alignment,javafx,Java,Treeview,Alignment,Javafx,我有一个树景。 如果此TreeItem展开,我会向该TreeItem中的每个项目动态添加一组其他TreeItem。(通过expandedProperty上的ChangeListener) 但是在通过代码自动扩展一些树元素后,它们将无法正确对齐,我得到如下结果: 在上下滚动一点后,我注意到,有时它对齐正确,有时甚至更糟 有人知道解决方法吗?还是一只虫子 编辑: 这应重现代码: import javafx.application.Application; import javafx.beans.v

我有一个树景。 如果此
TreeItem
展开,我会向该
TreeItem
中的每个项目动态添加一组其他TreeItem。(通过
expandedProperty
上的
ChangeListener

但是在通过代码自动扩展一些树元素后,它们将无法正确对齐,我得到如下结果:

在上下滚动一点后,我注意到,有时它对齐正确,有时甚至更糟

有人知道解决方法吗?还是一只虫子

编辑:

这应重现代码:

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.application.application;
导入javafx.beans.value.ChangeListener;
导入javafx.beans.value.observeValue;
导入javafx.scene.scene;
导入javafx.scene.control.TreeItem;
导入javafx.scene.control.TreeView;
导入javafx.scene.layout.BorderPane;
导入javafx.stage.stage;
公共类TreeViewTest扩展了应用程序{
公共静态void main(字符串[]args){
发射(args);
}
@凌驾
public void start(Stage stg)引发异常{
最终树视图树=新树视图();
TreeItem root=新的TreeItem(“根”);
根儿童(根,50岁);
树根;
BorderPane=新的BorderPane();
窗格。设置中心(树);
树状叶=根;
对于(int j=0;j更改公众假期(ObservalEvalue这段代码运行正常。我在Javafx 2.2上测试了它。我想你应该检查一下你的代码内部。我在我们的应用程序中使用了相当复杂的treeview,从一年以来,我们从未发现任何缩进问题。

你在使用什么版本的Javafx?你能发布一个简单的例子来重现这个问题吗sue?目前我正在使用JFX 2.2。奇怪的是:我目前面临这个问题,无法用示例代码重现。您提供的代码也没有为我重现这个问题。您现在找到解决方法了吗?恐怕,但就我记忆所及,我无法修复它。但是如果我没有记错,在不同的应用程序中,行为是不同的租用机器和不同的java版本(如果我没有记错的话,特别是在WinXP上,问题就出现了)。那时java8处于测试阶段(不过不确定是否在测试阶段)我认为我们选择了beta版,当时它似乎可以工作。但我不是100%确定。因为它是我应用程序中的一个次要功能,所以它并不那么重要。我发布的代码以及我应用程序中的代码产生了我描述的奇怪结果。无论我使用的是JavaFX2.2还是JavaFX8。真的很奇怪。。。