Java 模型更改时更新JxTreeTable

Java 模型更改时更新JxTreeTable,java,swing,redraw,swingx,jxtreetable,Java,Swing,Redraw,Swingx,Jxtreetable,当底层模型发生变化时,我很难找到重新绘制JxTreeTable的最佳方法 对于表中的每个节点,我都有一个对应的模型对象,因此,如果模型发生更改,我可以获得该节点 此后,给定一个节点,如何触发表上的重画/更改事件以强制它重画。欢迎提供线索,抱歉我没有太多的细节,我没有太多的代码 如果您的模型触发了正确的事件,它会自动工作,类似于标准的JTree和JTable 标准JTree的示例出现在中,如果您的模型触发了正确的事件,它将自动工作,类似于标准JTree和JTable 标准JTree的示例出现在中,

当底层模型发生变化时,我很难找到重新绘制JxTreeTable的最佳方法

对于表中的每个节点,我都有一个对应的模型对象,因此,如果模型发生更改,我可以获得该节点


此后,给定一个节点,如何触发表上的重画/更改事件以强制它重画。欢迎提供线索,抱歉我没有太多的细节,我没有太多的代码

如果您的模型触发了正确的事件,它会自动工作,类似于标准的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方法