操作javaFX后的折叠/展开项的TreeView状态

时间:2018-04-11 11:55:55

标签: javafx treeview

我在JavaFX中遇到TreeView控件的问题。当我进行一些操作时(例如添加新项目)。步骤是:

  1. 我有一些treeView扩展的项目
  2. 我使用contextMenu将新项目添加到指定节点
  3. 项目已添加到我的结构(后端)
  4. 重新加载TreeView - 它从头开始显示(仅限root)
  5. 我想在添加项目之前查看我的TreeView(同样的项目已折叠并展开)。我不知道该怎么做。我正在考虑更改StructureNode的实现(添加布尔字段isExpanded并使用它但它不起作用 - 我打开我的TreeView文件,其中没有关于它的信息)。你有什么建议吗?

1 个答案:

答案 0 :(得分:0)

因为您没有将Cell编辑系统直接用于菜单部分实例,所以必须从根目录重新加载树以显示添加的新创建的单元格。 您可以使用诸如byte [](每个TreeView的一个元素)之类的数组来存储1或0来标记每个树级别的视图状态,例如: 1 =显示0 =已关闭,如果需要,可能需要一个单独的变量用于" root" byte rootState = 0;或者1表示树是否显示。 当您通过后端将新项目放入其中时,您可以在重新加载时按照以下代码设置树形视图状态,如内存数组所示。 e.g。

byte rootState=1B;
byte[] subTreeViewStates = {1B,1B,0B,1B,0B};
TreeView[] subTreeViews={number1treeView,number2treeView,number3treeView,number4treeView,number5treeView};
if((new Byte(rootState).intValue())==1){
    root.setExpanded(true); // expands that TreeView node
}else{
    root.setExpanded(false); // collapses  that TreeView node
}
for(int mnu=0; (mnu < subTreeViews.length) ; mnu++){
if((new Byte(subTreeViews[mnu]).intValue()) == 1)
subTreeViews[mnu].setExpanded(true); // expands that TreeView node
}else{
subTreeViews[mnu].setExpanded(true); // collapses  that TreeView node
}
}// end for

和设置视图状态的内存以重新显示的方法

// int status is fed as either 1 or 0
byte setTreeviewsstatus(int menu,int status){
subTreeViewStates[menu]=new Integer(status).byteValue();
return subTreeViewStates[menu];
} // end method

byte rootState(int state){
rootState=new Integer(state).byteValue();
return rootState;
} // end method

添加TreeView后,重做数组更容易:#t; subTreeViews&#34;对于子视图的TreeView对象

byte[] addLevelsubtree(){
int subtrees = subTreeViewStates.length + 1;
subTreeViewStates 
byte[] st = new byte[subtrees];
// copy process memory storage states to temporary local array st
for(int rdo = 0; rdo < subtrees; rdo++){
if(rdo < (subtrees-1)){
st[rdo]=subTreeViewStates[rdo];
}else{
st[rdo]=0B; // collapsed hidden
}
// recopy to reinstantiated original process view state storage array
subTreeViewStates=new Byte[subtrees];
for(int rdo2 = 0; rdo2 < subtrees; rdo2++){
subTreeViewStates[rdo2]=st[rdo2];
} // end for
return subTreeViewStates;
} // end method



TreeView[] addLevelTreeVieObj(TreeView viewtreee){
int trvw = subTreeViews.length + 1;
TreeView[] tv = new TreeView[trvw];
for(int mmx=0; mmx < (trvw-1); mmx++){
tv[mmx] = subTreeViews[mmx]; 
}
tv[(trvw-1)] = viewtreee; // add last new TreeView object element reference
//
subTreeViews = new TreeView[trvw]; // reconstruct original array larger
for(int mmxb=0; mmxb < trvw; mmxb++){
subTreeViews[mmxb] = tv[mmxb]; 
}
return subTreeViews;
} // end method