JavaFX CheckBoxTreeItem:如果图形被扩展,图形将消失

JavaFX CheckBoxTreeItem:如果图形被扩展,图形将消失,java,javafx,treeview,Java,Javafx,Treeview,我有一堆CheckBoxTreeItem来使用TreeView构建项目的层次结构。我创建一个新对象并将其添加到其父对象,如下所示: CheckBoxTreeItem<MyClass> created = new CheckBoxTreeItem<MyClass>( myClassObj, new Label("label"); parent.getChildren().add(created); // parent is another CheckBoxTree

我有一堆
CheckBoxTreeItem
来使用
TreeView
构建项目的层次结构。我创建一个新对象并将其添加到其父对象,如下所示:

CheckBoxTreeItem<MyClass> created = new CheckBoxTreeItem<MyClass>(
    myClassObj, new Label("label");

parent.getChildren().add(created); // parent is another CheckBoxTreeItem
myTreeView.setCellFactory(CheckBoxTreeCell.<MyClass>forTreeView());
问题:如果我折叠/展开GUI中的项目,标签偶尔会消失,在应该呈现的地方留下空白。所以它在那里,但不可见。但是,将显示
标签
右侧的文本(来自
MyClass
对象)。我观察到我自己的类在扩展
CheckBoxTreeItem
checkboxtreeecell
时出现了问题,但问题似乎更一般,因为它可以在默认类中重现。如果你有什么想法,我很感谢你给我的任何提示

编辑:这是一个MCVE-只需展开并折叠几个复选框即可观察到奇怪的行为:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.control.cell.CheckBoxTreeCell;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class TreeViewSample3 extends Application {

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

    @Override
    public void start(Stage primaryStage) {
        //create the root element
        CheckBoxTreeItem<String> rootItem = 
            new CheckBoxTreeItem<String>("Root", new Label("Root"));

        rootItem.setExpanded(true); 
        rootItem.setIndependent(true);

        final TreeView<String> tree = new TreeView<String>(rootItem);  
        tree.setCellFactory(CheckBoxTreeCell.<String>forTreeView());  

        //put some checkboxes to the tree
        for (int i = 0; i < 3; i++) {
            final CheckBoxTreeItem<String> child = 
                new CheckBoxTreeItem<String>("2nd level", new Label("tier 2"));
            final CheckBoxTreeItem<String> grandChild = 
                new CheckBoxTreeItem<String>("3rd level", new Label("tier 3"));

            child.getChildren().add(grandChild);
            rootItem.getChildren().add(child);

        }

        StackPane root = new StackPane();
        root.getChildren().add(tree);
        primaryStage.setScene(new Scene(root, 300, 250));
        primaryStage.show();
    }
}
导入javafx.application.application;
导入javafx.scene.scene;
导入javafx.scene.control.*;
导入javafx.scene.control.cell.CheckBoxTreeCell;
导入javafx.scene.layout.StackPane;
导入javafx.stage.stage;
公共类TreeViewSample3扩展了应用程序{
公共静态void main(字符串[]args){
发射(args);
}
@凌驾
公共无效开始(阶段primaryStage){
//创建根元素
CheckBoxTreeItem根项目=
新复选框项目(“根”,新标签(“根”);
setExpanded(true);
setIndependent(true);
最终树视图树=新树视图(根项目);
setCellFactory(CheckBoxTreeCell.forTreeView());
//在树上放一些复选框
对于(int i=0;i<3;i++){
最终CheckBoxTreeItem子项=
新的CheckBoxTreeItem(“第二层”,新标签(“第二层”);
最终选中BoxTreeItem孙子=
新的CheckBoxTreeItem(“第三层”,新标签(“第三层”);
child.getChildren().add(孙子);
rootItem.getChildren().add(子级);
}
StackPane root=新的StackPane();
root.getChildren().add(树);
原始阶段。设置场景(新场景(根,300250));
primaryStage.show();
}
}
编辑2:错误屏幕截图。仅当您重复展开/折叠树中的项时,才会发生此错误。底部的项目似乎没有正确渲染。注意,使用的版本是8.40


您能添加一个可以重现问题的方法吗?当然可以。谢谢你的努力!非常适合我,您使用的是哪个版本的JavaFX?我看到了8u20中描述的行为,它似乎在8u40中得到了修复。@ItachiUchiha/James_D:我已经使用8u20、8u25和8u40版本构建了示例。这一问题在他们所有人身上都发生了。顺便说一下,我正在一台64位的Windows8.1机器上工作。我提供了一个屏幕截图来说明这个问题。