我有一个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)
指定自定义编辑器到树列的任何线索?
非常感谢您的反馈。
答案 0 :(得分: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);
arrgghhh ......
CU 珍
现在,我会尝试这是否有效,至少可以采取任何想法:)