2015-07-22 5 views
0

Вопрос уже был дан ответ, и я прочитал много подобных, но не работает для меня. Поэтому у меня есть модель JTable с пользовательской таблицей, которая расширяет DefaultTableModel. Мои данные: Object[][] data и имена столбцов String[] columnNames. Итак, когда мои данные изменяются, как мне обновить таблицу? Я использую tableModel.setDataVector(data, columnNames), и он работает, но он сбрасывает мой пользовательский рендеринг ящиков по умолчанию. Благодарю.Обновление JTable при изменении данных

+0

В каких отношениях ваши данные изменяются? Изменилось ли это через таблицу или с помощью других внешних средств? API-интерфейс таблицы способен управлять собой, поэтому изменение значений через таблицу не требует дополнительного ввода от вас. Изменения, сделанные извне, немного сложнее, в зависимости от количества изменений. Вы можете вызвать TableModel # setValueAt для простых изменений или полностью заменить модель JTable для более сложных chmages – MadProgrammer

+0

Мои данные изменяются следующим образом: данные [0] [0] были, например, 5, а теперь это 10. Так как я делаю это изменение таблица также? Или вы думаете, что я не должен отображать данные через tableModel.setDataVector (..) и вместо этого использовать table.setValue (..)? –

ответ

2

Не меняйте Массивы! Функция DefaultTableModel скопирует данные из массива во внутреннее хранилище, используемое модулем DefaultTableModel.

Вместо этого вам необходимо напрямую изменить TableModel с помощью метода setValueAt(...) JTable или TableModel. Затем TableModel уведомит таблицу о том, что изменения были сделаны.

Я использую tableModel.setDataVector(data, columnNames) и он работает, но он сбрасывает свой пользовательский визуализатор ячейки по умолчанию

Если вам необходимо восстановить всю TableModel по какой-либо причине, то вы можете использовать:

table.setAutoCreateColumnsFromModel(false); 

ПОСЛЕ того, как вы создаете таблицу с помощью TableModel в первый раз. Теперь, в следующий раз, когда вы используете метод setDataVector(...), таблица TableColumnModel не будет воссоздана, что означает, что вы не потеряете пользовательские средства визуализации.

+0

Hm. Звучит хорошо. Но какой должна быть «причина» для воссоздания всей таблицы? В моем случае у меня есть таблица с некоторыми статьями и их статистика чисел. Поэтому, когда пользователь вводит новое состояние в следующем столбце, столбец после показывает разницу и денежный доход. Это причина воссоздать всю модель таблицы или я должен придерживаться table.setValue (..)? –

+0

@ ЂрђеЂашић, вы меняете значение одной ячейки, поэтому используете метод setValueAt (...). 'Но что должно быть необходимо« причина »для воссоздания всей модели таблицы?» - когда вы меняете все данные. Возможно, вы запрашиваете базу данных. – camickr

+0

Хорошо, спасибо за объяснение. Теперь я понимаю. С наилучшими пожеланиями! Я соглашусь ответить. –

Смежные вопросы