`
henry406
  • 浏览: 115807 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

树节点状态的保存和加载

    博客分类:
  • java
阅读更多
保存树节点状态至数据库表中
this.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
        String rows = "";
        TreePath rootPath = new TreePath(((TreeNode) tree.getModel().getRoot()));
        Enumeration enums = tree.getExpandedDescendants(rootPath);
        while (enums != null && enums.hasMoreElements()) {
            TreePath path = (TreePath) enums.nextElement();
            int row = tree.getRowForPath(path);
            rows += "," + row;
        }
        rows = (rows.startsWith(",") ? rows.substring(1) : rows);
       
        
        TreePath path  = tree.getSelectionPath();                
        int selectedRow = tree.getLeadSelectionRow();
        
        String sql = "if ((select count(1) from CompanyStatus where loginUser='"+ loginUser +"')>0) "  
                     + "update CompanyStatus set expandedRow='" + rows + "', selectedRow=" + selectedRow + " where loginUser='"+ loginUser +"'" 
                     + " else insert into CompanyStatus (loginUser, expandedRow, selectedRow) values('"+ loginUser +"','" + rows + "'," + selectedRow + ")";
        execute(sql);
    }
});


从数据库中加载树的状态
public static void initCompanyStatus(JTree tree) {
    int selectedRow = -1;
    String[] expandedRow = {""};
    String sql = "select expandedRow, selectedRow from CompanyStatus where loginUser='"+ loginUser +"'";
    QueryDataSet dataset = executeQuery(sql);
    if(dataset.getRowCount() > 0) {
        expandedRow = dataset.getString("expandedRow").split(",");
        selectedRow = dataset.getInt("selectedRow");
    }
            
    for(int i=0; i<tree.getRowCount(); i++) {
        for(int j=0; j<expandedRow.length; j++) {
            if(expandedRow[j].equals("" + i)) {
                tree.expandRow(i);
                break;
            }
        }
    }
    
    tree.setSelectionRow(selectedRow);
}
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    android树节点例子

    此外,我们还需要考虑数据的加载和存储。如果树形结构的数据较大,可能需要异步加载,避免阻塞主线程。同时,为了保存用户的展开/折叠状态,可以将状态存储在SharedPreferences或数据库中,以便在下次打开应用时恢复...

    完整的ZTree树展示及对树节点的增删改

    4. 动态加载:对于大数据量的树,可以采用异步加载方式,只在需要时加载子节点,提高页面性能。 二、树节点的增删改操作 1. 增加节点:可以通过API调用`addNode()`方法,在指定父节点下添加新节点。需要提供新节点...

    TreeView增删节点并保存

    4. **保存和加载状态**:为了在程序关闭后重新加载`TreeView`的状态,你需要将节点结构序列化到文件,然后在启动时反序列化。C#提供了`XmlSerializer`类来实现这一功能。可以创建一个`TreeNodeCollection`的`...

    delphi树RzCheckTree_tree说明保存及提取

    - 在保存节点状态时,可能需要额外记录节点的层级关系,以便正确恢复树结构。 总结,RzCheckTree控件在Delphi中的应用主要涉及数据的保存和提取,这对于维护用户设置或应用状态至关重要。通过以上步骤,开发者可以...

    wicket组织树带checkbox可逐层加载数据示例

    1. **树节点模型**:定义树的结构和数据,通常包括每个节点的ID、父节点ID、是否有子节点以及节点的文本信息。在Wicket中,可以使用`IModel`接口来封装这些信息。 2. **树组件**:使用`Tree`类实例化树形结构,设置...

    树的遍历及其显示节点信息

    1. 初始化CTreeCtrl,加载树结构,通常通过调用InsertItem()函数添加节点。 2. 实现遍历函数,依据选择的遍历策略访问每个节点,并调用相关函数获取或更新节点信息。 3. 如果需要,使用GetItemData()获取附加信息,...

    DevTreeList保存刷新前状态

    这时,可以考虑只保存用户可见部分的状态,或者使用更高效的存储和恢复策略,如只保存最近操作的节点状态。 在提供的压缩包文件“DevTreeList保存刷新前状态”中,可能包含了实现这一功能的示例代码或详细说明。...

    Android多级树形选择列表

    6. **状态保存与恢复**:为了保证用户体验,需要在activity或fragment的保存实例状态(onSaveInstanceState)和恢复实例状态(onCreateView/onActivityCreated)中保存和恢复树的状态,包括当前展开的节点和选中的...

    编写一个能动态改变树结点的程序

    在Java编程中,创建一个能够动态改变树节点的程序是一个常见的需求,特别是在构建用户界面或者数据结构演示时...在实际项目中,根据业务需求,可能还需要处理节点的点击事件、添加自定义图标、数据的加载和保存等功能。

    c# treeview 获取子节点

    同时,可以使用`Save`方法将`TreeView`的状态保存到XML文件或数据库,以便后续加载。 7. **自定义逻辑** 作者提到资源可能存在小瑕疵,这可能涉及到自定义逻辑,比如在获取子节点时加入特定条件。例如,获取特定父...

    MFC实现树形控件TreeCtrl三态选择树

    为了显示第三种状态,我们需要额外加载一组图标,并在设置节点状态时调用SetItemState和SetItemImage函数来切换图标。 在实际编程过程中,可以使用MFC的资源编辑器创建和编辑资源,包括自定义的图标资源。"MutiTree...

    跨越时间的智能:PyTorch模型保存与加载全指南

    2. **版本兼容性**:考虑到PyTorch的版本更新可能会对模型的保存和加载造成影响,因此建议在保存时记录使用的PyTorch版本。 3. **数据并行**:当使用`DataParallel`或`DistributedDataParallel`时,需要特别注意模型...

    TreeViewModel_new.zip

    3. **恢复状态**:在`endResetModel()`之后,根据保存的展开状态,重新调用`QTreeView::expand()`来展开相应的节点。 项目中的`TreeViewModel_new`可能包含了实现这些功能的代码。在解压文件后,你可以找到实现`...

    TreeView 中节点拖动、增加、删除等功能演示

    在Windows编程领域,`TreeView`...实际应用中,你可能需要根据具体需求进行更复杂的功能扩展,如处理多选、保存和加载节点状态、异步加载子节点等。同时,配合良好的UI反馈和错误处理机制,能提供更为完善的用户体验。

    Godot引擎开发:对话系统实现-(10).多语言支持与本地化.docxGodot引擎开发:对话系统实现-(11).保存和加载对话状态.docxGodot引擎开发:对话系统实现-(12).对话系统

    保存和加载对话状态.docx Godot引擎开发:对话系统实现_(12).对话系统的优化与调试.docx Godot引擎开发:对话系统实现_(13).高级对话系统功能:分支和条件判断.docx Godot引擎开发:对话系统实现_(14).与游戏...

    基于vue、iview实现tree组件可拖拽、双击编辑

    为了支持拖拽,还需要添加额外的字段来记录拖动状态,例如拖动源节点ID和目标节点ID。 为了实现以上功能,你需要对Vue的生命周期、组件通信、事件绑定、数据操作有深入理解。同时,HTML5的拖放API也需要一定的掌握...

    Vue代码示例,左边Tree,右边对Tree节点配置子表多条数据

    5. **状态管理(State Management)**:如果应用较复杂,可能需要使用Vuex来管理全局状态,确保树节点和子表之间的交互和数据同步。 6. **API调用(API Calls)**:与后端Controller通信,发送HTTP请求获取数据、...

    TreeView 单击一节点弹出相应的窗体

    在实际项目中,可能还需要考虑其他因素,如错误处理、窗体状态管理(如关闭后是否从内存中移除)、以及节点数据的动态加载等。但以上代码和解释已经涵盖了核心概念,帮助你理解和实现“单击`TreeView`节点弹出相应...

    Android树形结构RecyclerView

    8. **状态保存和恢复**:当应用重新打开或者设备旋转时,需要保存和恢复RecyclerView的状态,包括当前展开的节点和它们的位置。 9. **触摸事件处理**:正确处理触摸事件以区分点击节点和滚动操作,防止误触导致的...

    CTreeCtrl 可以三态表示的树

    6. **保存和加载状态**:如果应用需要在启动时恢复上次的选中状态,还需要实现保存和加载节点状态的功能。这通常涉及序列化节点状态到文件或注册表,然后在启动时反序列化。 最后,为了提高用户体验,还可以考虑...

Global site tag (gtag.js) - Google Analytics