【问题标题】:Access tree object in netbeans outlinenetbeans大纲中的访问树对象
【发布时间】:2011-02-19 22:27:21
【问题描述】:

我正在使用来自 netbeans 的Outline 来显示一些结构化数据。

如何将选定的行映射到树中的对象?

【问题讨论】:

    标签: java swing outline


    【解决方案1】:

    您可以查看Announcing the new Swing Tree Table today 中的示例。貌似作者是Creating a Data Model,所以Responding to Node Selection应该会有所帮助。我在 NetBeans 6.8 中找到了 org.netbeans.swing.outline.Outline 类:

    NetBeans/platform11/modules/org-netbeans-swing-outline.jar

    附录:

    请注意,OutlineJTable 的后代,因此 How to Use Tables: User Selections 可能会有所帮助。根据上面引用的示例,这里有一个监听器,它显示了随着节点展开和折叠以及选择保持不变时行数的明显变化:

    outline.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
        @Override
        public void valueChanged(ListSelectionEvent e) {
            int row = outline.getSelectedRow();
            File f = (File) outline.getValueAt(row, 0);
            if (!e.getValueIsAdjusting()) {
                System.out.println(row + ": " + f);
            }
        }
    });
    

    虽然provisional,您可能会查看OutlineModelDefaultOutlineModel。前者同时实现TreeModelTableModel 并提供TreePathSupport;后者提到了“TableModelEvent 和 TreeModelEvent 之间的阻抗不匹配”。

    JTable一样,视图中选中的行索引可能与模型中的对应行不匹配,可能是由于排序等原因。getValueAt()方法似乎是调用convertRowIndexToModel()的方便方法。这在 Swing 的可分离模型架构中很常见,它“将每个组件的视图和控制器部分折叠成单个 UI(用户界面)对象”。见A Swing Architecture Overview

    【讨论】:

    • Outline 仅提供 getSelectedRow() 方法。但是行的索引取决于上面节点的展开/折叠状态。我看不到将所选行的索引映射到 TreeModel 中的对象的方法。
    • 见上文。我不确定您要做什么,但您似乎可以根据需要遍历您的 RowModelTreeModel
    • 这是一种丑陋的解决方案,跟踪视图以获取模型信息,我试图避免。但这似乎是目前唯一的方法。感谢您的帮助!
    • 有趣。我认为这是 Swing 架构的产物;见上文。
    • 另见answer
    猜你喜欢
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-19
    • 1970-01-01
    相关资源
    最近更新 更多