当前位置: 首页 > 知识库问答 >
问题:

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

何松
2023-03-14
  1. 我已展开treeView的某些项
  2. 我使用contextMenu向指定节点添加新项目
  3. 项已添加到我的结构(后端)
  4. 重新加载TreeView-它从一开始就显示(仅根目录)

我想有我的树视图的视图像之前添加项目(这个相同的项目折叠和展开)。我不知道怎么做。我正在考虑改变StructureNode的实现(add boolean field是扩展的并使用它,但它不起作用--我正在从文件中打开我的树视图,那里没有关于它的信息)。你有什么建议吗?

共有1个答案

颜嘉福
2023-03-14

因为您不是直接在菜单部分实例中使用单元格编辑系统,所以必须从根重新加载树,以显示添加的新创建单元格。您可以使用byte[](每个树视图的一个元素)这样的数组,您可以存储1或0来标记每个树级别的视图状态,例如,1=显示,0=关闭,如果需要,还可以为“根”字节rootstate=0单独设置一个变量;或1表示树是否显示。当您通过后端将一个新项放入其中时,您可以设置treeview状态,如您的内存数组所示,在重新加载它时,类似于下面的代码。例如。

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之后,为子视图的TreeView对象重做数组“SubTreeViews”会更容易

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
 类似资料:
  • 当折叠/展开某个节点时,其他节点的复选框被选中或未选中。 要重现这种行为,只需展开所有节点,检查、折叠和将自动检查。 我怎样才能防止这种行为?在稍后的程序中,我希望通过TreeView并获取节点的状态(已选中或未选中)来使用它们。

  • 问题内容: 我正在尝试使用treeView创建菜单。这是我第一次使用treeView,并且已经在多个网站上进行了阅读。 我在进行动作事件时遇到一些问题。我想要做的基本上是在用户单击树形视图中的某个节点时触发并发生事件,到目前为止,我有以下内容: 不幸的是,这似乎不起作用。 有什么方法可以在不更改类型的情况下将甚至添加到单个项目? 问题答案: 根据JavaFX 2.2文档 : “..A TreeIt

  • 问题内容: 我有一个带JSplitPane的JFrame,它是OneTouchExpandable。我想记住JSplitPane在JFrame上的最后一个Divider位置,如果重新打开JFrame,则恢复该位置。 它工作正常,但是如果用户通过oneTouchExpandable UI- Widget展开一侧,则我仅将’int’-Position放置在dispose上,然后再次将’int’-Pos

  • 我想展开/折叠我的recyclerView项目,以显示更多信息。我想实现与SlideExpandableListView相同的效果。 基本上,在我的viewHolder中,我有一个不可见的视图,我想做一个平滑的展开/折叠动画,而不是将可见性设置为仅可见/消失。我一次只需要扩展一个项目,如果有一些提升来显示该项目已被选中,那就太酷了。 这与新的Android最近通话历史记录列表的效果相同。“回调”和

  • 我有一个带有多个视图保持器的RecyclerView适配器。每个ViewHolder都有一个标题TextView和一个嵌套的RecyclerView,工作正常。但我想实现一个扩展/折叠函数,这样嵌套的RecyclerView就可以隐藏,直到单击标题为止。我使用此方法RecyclerView展开/折叠项目。它可以工作,但当我单击标题以展开嵌套的RecyleView时,recyclerview不会填充

  • 我正在处理树状态(展开/选择的节点)保存,并创建了一个实用程序类,可以保存和恢复节点状态。工作很好。 但JTree本身仍然存在一个问题--当用户使用某个JTree实例(展开/折叠节点)时,可能会出现某个节点(隐藏在另一个折叠节点下)被展开的情况。没什么特别的--那很好。 JTree将有关展开/折叠节点的记录保存在单独的哈希表中,使用节点路径作为键,使用布尔值作为展开状态值。因此,当折叠的父节点下的