我在解决底层模型更改时重绘JxTreeTable的最佳方法时遇到问题。模型更改时更新JxTreeTable
对于表中的每个节点,我都有一个对应的模型对象,所以如果模型发生变化,我可以得到节点。
此后,给定一个节点,如何触发表上的重绘/更改事件以强制重绘。欢迎提供线索,对细节信息表示歉意,我没有太多需要通过代码来展示。
我在解决底层模型更改时重绘JxTreeTable的最佳方法时遇到问题。模型更改时更新JxTreeTable
对于表中的每个节点,我都有一个对应的模型对象,所以如果模型发生变化,我可以得到节点。
此后,给定一个节点,如何触发表上的重绘/更改事件以强制重绘。欢迎提供线索,对细节信息表示歉意,我没有太多需要通过代码来展示。
我落得这样做:
TreeTableNode parent = node.getParent();
modelSupport.firePathChanged(new TreePath(getPathToRoot(parent)));
的代码被称为在我的模型,它扩展,DefaultTreeTableModel。
node
是包含已更改模型的AbstractMutableTreeTableNode。
如果您的模型触发了正确的事件,它将自动工作,类似于标准JTree
和JTable
。
的例子有标准JTree
出现在Swing tutorial
你可以试试这个:
yourJxTreeTable.getTreeTableModel.fireTableRowsUpdated(firstRow, lastRow)
我认为它会工作。
不幸的是,你认为错误;-) a)通知_always_是模型本身的责任,从不从外部代码调用任何fireXX b)没有方法fireTableRowsUpdated在TreeTableModel中(它是 - TreeModel) – kleopatra 2012-03-28 08:08:17
Mhh,ok ... 我看到它是这样的一个TreeTableModel:http://download.java.net/javadesktop/swinglabs/releases/0。8 /文档/ API /组织/ JDesktop中/ swingx/JXTreeTable.html 我已经有这样那样的问题和fireXX行动工作得很好,即使它不是一个干净的代码。 – 2012-03-28 09:29:48
它不仅是不干净,而且是错误的。 – kleopatra 2012-03-28 11:13:01
简单,调用JXTreeTable.updateUI();
DefaultTreeTableModel包含modelSupport可用于触发事件的字段。对于您的情况,您可以在您的模型中使用以下一段代码:
modelSupport.fireNewRoot();
updateUI()方法也适用于我,也!
我的模型实现TreeTableModel,并在其中有一个TreeModelSupport对象。
当我添加/删除节点,我火modelSupport.fireChildXXX方法:
public void insertNodeInto(MutableTreeTableNode newChild, MutableTreeTableNode parent, int index) {
modelSupport.fireChildAdded(new TreePath(getPathToRoot(parent)), index, newChild);
}
我加TreeModelListener到modelSupport对象和覆盖treeStructureChanged方法:
public void treeStructureChanged(TreeModelEvent e) {
m.notifyChanges();
}
我notifyChanges方法喜欢这样的:
public void notifyChanges()
{
treeTable.updateUI();
}
就这样! :)
TreeTableModel是一个TreeModel,因此为了解决通知问题,首先测试您的自定义实现对一个普通的J/X/Tree:如果该行为(又名:更新)正确,它在JXTreeTable中的机会很高以及 – kleopatra 2012-03-28 08:14:36