Java: как заставить fireTableStructureChanged изменить AbstractTableModel? - PullRequest
3 голосов
/ 03 апреля 2012

Я сделал пользовательскую AbstractTableModel. Конструктор инициализирует модель с данными из файла. Однако я хочу добавить в модель дополнительный столбец (это связано с ограничениями SQL в ее столбцах).

Я стремлюсь к этому, добавляя в код инициализации вызов метода addColumn (String columnName, Vector columnData).

Этот метод addColumn в моем пользовательском AbstractTableModel получен непосредственно из метода addColumn DefaultTableModel, включая "fireTableStructureChanged ()".

Тем не менее, когда я запускаю этот код, fireTableStructureChanged () появляется не для добавления моего нового столбца, а JTable отображается только с данными из файла. Почему это может быть?

Вот краткое обозначение кода, который я использую:

public class Dummy extends AbstractTableModel {
    public Dummy() {
        //load data from SQL file into ResultSets
        //transfer ResultSet.metadata into columnHeaders Vector<String>
        //transfer ResultSet.data into columnDatums Vector<String>
        fireTableChanged(null);
        addColumn("Added Heading", (Vector)null);
    }

    public addColumn(String columnHeader, Vector columnData) {
         columnHeaders.add(columnHeader);
         // transfer columnData into columnDatums
         fireTableStructureChanged();
    }
 }

Это проблема слушателя - ничего не слушает в данный момент времени fireTableStructureChanged ()?

1 Ответ

4 голосов
/ 04 апреля 2012

Вам нужно будет раскрыть вашу реализацию трех необходимых (то есть не реализованных ) методов, указанных в интерфейсе TableModel в AbstractTableModel.В частности, getColumnCount() и getRowCount() должны возвращать обновленные значения.Методы fireXxx() просто инструктируют представление запрашивать модель через getValueAt().Данные должны быть там в ожидании getValueAt() для извлечения.EnvTableTest - простой пример.Также рассмотрим более современную альтернативу Vector, которая включает, возможно, ненужный код синхронизации.

...