0

我有一个 JXTreeTable,其数据模型扩展 DefaultTreeTableModel,CustomNode 扩展 AbstractMutableTreeTableNode。每一列都可以按预期进行编辑,以及分层树节点。

如何将自定义编辑器 (TreeTableCellEditor) 应用于 JXTreeTable 中的分层列?

以下是几次尝试,但没有产生预期的结果:

treeTable.setCellEditor(editor) 
treeTable.getColumnModel().getColumn(0).setCellEditor(editor)
treeTable.getColumn(0).setCellEditor(editor)
treeTable.getColumnExt(0).setCellEditor(editor)

我能够获得用于呈现分层列的固有树,但也无法通过它指定自定义编辑器。

private JTree getTree(JXTreeTable treeTable){
     try{
        Field field = JXTreeTable.class.getDeclaredField("renderer");
        field.setAccessible(true);
        return (JTree)field.get(treeTable);
     }catch(NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException ex){
        throw new RuntimeException(ex);
     }
}

似乎有一个预先发布的“解决方法”,但我无法访问页面内容:http://forums.java.net/jive/message.jspa?messageID=387603 https:// java.net/projects/swingx/lists/issues/archive/2012-06/message/22

将自定义编辑器指定为树列的任何线索?

非常感谢您的反馈。

4

1 回答 1

1

我没有评论的声誉,但感谢 WayBack Machine,这是“will”提到的“解决方法”: https ://web.archive.org/web/20120831192839/http://www.java.net/node/ 701358

无论如何(如果此链接也被删除),这里是由 kleopatra 提供支持的“解决方法”答案(原样):


嗯......你是对的:看起来我们没有 api 来挂钩自定义编辑器。请你提出一个问题,这样我们就不会忘记?并不是说很有可能很快就会解决它,但谁知道(自愿任何人?)

同时,我看到的唯一方法是将treeTable子类化并覆盖getCellEditor,例如:

@override
public TableCellEditor getTableCellEditor(row, column) {
   if (isHierachicalColumn(column)) {
      return myTreeTableCellEditor;
   }
   return super....
}

获得树的唯一方法(这是一个受到严格保护的家庭秘密:) 是肮脏的:

JXTree tree = (JXTree) treeTable.getCellRenderer(anyrow, getHierarchicalColumn());
MyTreeTableCellRenderer r = new MyTreeTableCellRenderer(tree);

啊...

铜珍妮特


现在,我会尝试这是否可行,至少要采取任何想法:)

于 2017-02-24T11:55:49.180 回答