Java 模型更改时更新JxTreeTable
当底层模型发生变化时,我很难找到重新绘制JxTreeTable的最佳方法 对于表中的每个节点,我都有一个对应的模型对象,因此,如果模型发生更改,我可以获得该节点Java 模型更改时更新JxTreeTable,java,swing,redraw,swingx,jxtreetable,Java,Swing,Redraw,Swingx,Jxtreetable,当底层模型发生变化时,我很难找到重新绘制JxTreeTable的最佳方法 对于表中的每个节点,我都有一个对应的模型对象,因此,如果模型发生更改,我可以获得该节点 此后,给定一个节点,如何触发表上的重画/更改事件以强制它重画。欢迎提供线索,抱歉我没有太多的细节,我没有太多的代码 如果您的模型触发了正确的事件,它会自动工作,类似于标准的JTree和JTable 标准JTree的示例出现在中,如果您的模型触发了正确的事件,它将自动工作,类似于标准JTree和JTable 标准JTree的示例出现在中,
此后,给定一个节点,如何触发表上的重画/更改事件以强制它重画。欢迎提供线索,抱歉我没有太多的细节,我没有太多的代码 如果您的模型触发了正确的事件,它会自动工作,类似于标准的JTree和JTable
标准JTree的示例出现在中,如果您的模型触发了正确的事件,它将自动工作,类似于标准JTree和JTable 标准JTree的示例出现在中,您可以尝试以下方法:
yourJxTreeTable.getTreeTableModel.fireTableRowsUpdated(firstRow, lastRow)
我认为它会起作用 您可以尝试以下方法:
yourJxTreeTable.getTreeTableModel.fireTableRowsUpdated(firstRow, lastRow)
我认为它会起作用 我最后做了这样一件事:
TreeTableNode parent = node.getParent();
modelSupport.firePathChanged(new TreePath(getPathToRoot(parent)));
代码在我的模型中调用,该模型扩展了DefaultTreeTableModel
节点是AbstractMutableTreeTableNode,其中包含已更改的模型。我最终执行了以下操作:
TreeTableNode parent = node.getParent();
modelSupport.firePathChanged(new TreePath(getPathToRoot(parent)));
代码在我的模型中调用,该模型扩展了DefaultTreeTableModel
节点是包含已更改模型的AbstractMutableTreeTableNode。简单,调用JXTreeTable.updateUI simple,调用JXTreeTable.updateUI DefaultTreeTableModel包含可用于触发事件的modelSupport字段。对于您的情况,您可以在模型中使用以下代码:
modelSupport.fireNewRoot();
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();
}
我的方法如下所示:
public void notifyChanges()
{
treeTable.updateUI();
}
就这些!: 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();
}
我的方法如下所示:
public void notifyChanges()
{
treeTable.updateUI();
}
就这些!: 不幸的是,你想错了;-通知始终是模型本身的责任,永远不要从外部调用任何fireXX代码b在TreeTableModel中没有方法fireTableRowsUpdated它是一个TreeModelHh,好的。。。我看到这是一个树模型:我已经有了这样的问题,fireXX操作运行良好,即使它不是一个干净的代码。好吧,如果我的JTree没有重新绘制,我该怎么办?向我解释:和往常一样的程序:确保您的模型符合其通知合同不幸的是,您认为错误;-通知始终是模型本身的责任,永远不要从外部调用任何fireXX代码b在TreeTableModel中没有方法fireTableRowsUpdated它是一个TreeModelHh,好的。。。我看到这是一个树模型:我已经有了这样的问题,fireXX操作运行良好,即使它不是一个干净的代码。好吧,如果我的JTree没有重新绘制,我该怎么办?解释我:和往常一样的过程:确保你的模型符合它的通知契约TreeTableModel是一个TreeModel,所以为了解决通知问题,从测试你的自定义实现开始,对照一个普通的J/X/树:如果它的行为正确,aka:updates,它在JXTreeTable中也很有可能出现TreeTableModel是一个TreeModel,因此要解决通知问题,首先要针对普通的J/X/Tree测试您的自定义实现:如果它的行为正确,那么aka:updates,它在JXTreeTable中也有很高的可能性用户代码不应该调用组件的updateUI方法用户代码不应该调用组件的updateUI方法