У меня есть класс, который реализует интерфейс TableModel. Когда я вызываю setModel на моем jTable и устанавливаю свой класс как модель, а затем вызываю jTable.updateUI();
все в порядке. Но в некоторых случаях я хочу изменить модель с другой структурой. Отображение данных по-прежнему отлично работает, но мои столбцы не обновляются. Есть ли способ заставить мою таблицу также обновлять столбцы из новой модели?автообновление столбцов jtable при изменении модели
ответ
Модель должна запускать соответствующее событие, например: fireTableStructureChanged, если изменились как данные, так и структура.
http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#fire
, но я не расширяю 'AbstractTableModel'. Я использую интерфейс. – soupdiver
следует ссылке (добавлен +1), этот ответ верен вашему слишком широкому вопросу, для лучшей помощи скорее опубликуйте [SSCCE] (http: // sscce. org /) – mKorbel
Скорее всего, вам действительно нужно. DefaultTableModel - это подход, ориентированный на данные, а не объектно-ориентированный подход, что приводит ко многим проблемам проектирования. Пользовательская модель (обычно основанная на AbstractTableModel), с другой стороны, может обертывать список объектов. – Puce
jTable.updateUI();
является Внешний вид и соответствующий метод, не используют, что
У меня есть класс, который реализует интерфейс TableModel.
you have to override right notifiers методов из
TableModel
использования
DefaultTableModel
, есть все оповещатели, реализованные в API,все обновления должно быть сделано на
EventDispatchThread
Если, как и я, ты просто пишут небольшой взлом, вы можете использовать метод .repaint() вместо метода .updateUI().
Я использовал это, потому что я не использую TableModel, но я только данные в Object [] [], так же, как и в первом примере Солнца (хорошо оракул) учебник
нет, перекраска не нужна с хорошо продуманной моделью (и примечание: есть _always_ модель, управляющая JTable - это может быть непреложная реализация, хотя) – kleopatra
Try это (вставить после setModel (myTableModel); линия):
myJTable.createDefaultColumnsFromModel();
В моем случае это решается вопрос обновления, в то время как: .repaint(), .invalidate(), .fireTableDataChanged() не помогло.
нет, это не метод для вызова по коду приложения: происходит автоматически на setModel (при условии, что вы не изменили значение true для autoCreateColumns). Если это поможет в вашем контексте, что-то не так в другом месте – kleopatra
Неверная реализация вашей модели. Код приложения _never_ вызывает updateUI. – kleopatra