Обновление JxTreeTable при изменении модели - PullRequest
1 голос
/ 28 марта 2012

У меня проблемы с разработкой наилучшего способа перерисовки JxTreeTable при изменении базовой модели.

Для каждого узла в таблице у меня есть соответствующий объект модели, поэтому, если модель изменяется, я могу получитьthe Node.

После этого, при наличии Node, как вы запускаете событие перерисовки / изменения таблицы, чтобы заставить его перерисовать.Приветствую подсказки, извиняюсь за то, что был легок в деталях, я не могу многое показать с помощью кода.

Ответы [ 6 ]

4 голосов
/ 30 марта 2012

Я закончил этим:

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

Код вызывается в моей модели, которая расширяется, DefaultTreeTableModel.

node - это AbstractMutableTreeTableNode, который содержит измененную модель.

3 голосов
/ 28 марта 2012

Работает автоматически, если ваша модель генерирует правильные события, аналогично стандартным JTree и JTable.

Пример со стандартом JTree присутствует в Swing tutorial

1 голос
/ 28 марта 2012

Вы можете попробовать это:

yourJxTreeTable.getTreeTableModel.fireTableRowsUpdated(firstRow, lastRow)

Я думаю, что это сработает.

0 голосов
/ 06 февраля 2017

Метод 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();
}

Вот и все! :)

0 голосов
/ 09 августа 2015

DefaultTreeTableModel содержит modelSupport поле, которое вы можете использовать для запуска событий.Для вашего случая вы можете использовать следующий код в вашей модели:

modelSupport.fireNewRoot(); 
0 голосов
/ 18 июня 2015

просто, вызов JXTreeTable.updateUI ();

...