模型更改时更新JxTreeTable

时间:2012-03-27 20:31:49

标签: java swing redraw swingx jxtreetable

当底层模型发生变化时,我无法找到重绘JxTreeTable的最佳方法。

对于表中的每个节点,我都有一个相应的模型对象,因此如果模型发生变化,我可以得到节点。

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

6 个答案:

答案 0 :(得分:4)

我最终这样做了:

            TreeTableNode parent = node.getParent();
            modelSupport.firePathChanged(new TreePath(getPathToRoot(parent)));

代码在我的模型中调用,扩展了DefaultTreeTableModel。

node是包含已更改模型的AbstractMutableTreeTableNode。

答案 1 :(得分:3)

如果您的模型触发了正确的事件,它会自动生效,类似于标准JTreeJTable

Swing tutorial

中包含标准JTree的示例

答案 2 :(得分:1)

你可以试试这个:

yourJxTreeTable.getTreeTableModel.fireTableRowsUpdated(firstRow, lastRow)

我认为它会起作用。

答案 3 :(得分:0)

DefaultTreeTableModel包含 modelSupport 字段,您可以使用该字段触发事件。对于您的情况,您可以在模型中使用以下代码:

modelSupport.fireNewRoot(); 

答案 4 :(得分:0)

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();
}

这就是全部! :)

答案 5 :(得分:-1)

简单,调用JXTreeTable.updateUI();