当底层模型发生变化时,我无法找出重绘 JxTreeTable 的最佳方法。
对于表中的每个节点,我都有一个相应的模型对象,所以如果模型发生变化,我可以获得 Node.js。
此后,给定一个节点,如何在表上触发重绘/更改事件以强制它重绘。欢迎提供线索,对细节的轻描淡写表示歉意,我没有太多可以通过代码展示的内容。
当底层模型发生变化时,我无法找出重绘 JxTreeTable 的最佳方法。
对于表中的每个节点,我都有一个相应的模型对象,所以如果模型发生变化,我可以获得 Node.js。
此后,给定一个节点,如何在表上触发重绘/更改事件以强制它重绘。欢迎提供线索,对细节的轻描淡写表示歉意,我没有太多可以通过代码展示的内容。
我最终这样做了:
TreeTableNode parent = node.getParent();
modelSupport.firePathChanged(new TreePath(getPathToRoot(parent)));
该代码在我的模型中调用,该模型扩展了 DefaultTreeTableModel。
node
是包含已更改模型的 AbstractMutableTreeTableNode。
如果您的模型触发正确的事件,它会自动工作,类似于标准JTree
和JTable
.
有一个标准的例子JTree
出现在Swing tutorial
你可以试试这个:
yourJxTreeTable.getTreeTableModel.fireTableRowsUpdated(firstRow, lastRow)
我认为它会起作用。
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();
}
就这样!:)
很简单,调用 JXTreeTable.updateUI();