2015-06-16 1 views
0

Я пытаюсь динамически добавлять строки в таблицу с помощью AbstractTableModel. Строки добавляются в цикл. Когда вторая строка добавляется, значения первой строки отображаются как нулевые в таблице. Программа спроектирована таким образом, что значения строк обновляются, но только для просмотра пользователем, как я могу сохранить значения в таблице, так как она не обновляется до нулевых значений.Java AbstractTableModel Динамически заполняемые строки

Почему таблица всегда обновляет рендеринг таблицы из первой строки? Есть ли способ сделать только следующую строку без перепечатки того, что уже было напечатано в первой строке.

Вот некоторые части моего кода:

public class RunConfig extends AbstractTableModel { 


    private final LinkedList<Section> daten = new LinkedList<Section>(); 
    private String[]  header = {"Links","% N", "% M", "% H", "% S"}; 

    public RunConfig() { 

    } 

    public void addElement(Section addValue) 
    { 
     daten.add(addValue); 
     fireTableRowsInserted(daten.size()-1, daten.size()-1); 
    } 

    public int getColumnCount() { 
     return header.length; 
    } 

    public String getColumnName(int col) { 
     return header[col]; 
    } 


    public Object getValueAt(int row, int col) { 
     return ((Section)daten.get(row)); 
    } 

    public int getRowCount() { 
     return daten.size(); 
    } 

    public boolean isCellEditable(int row, int col){ 
     return false; 
    } 

} 
+0

Как выглядит «Секция»? Кроме того, 'getValueAt' должно возвращать значение для указанной ячейки (строки/столбца), а не объекта, который представляет строку ... – MadProgrammer

+0

Рассмотрите возможность предоставления [runnable example] (https://stackoverflow.com/help/mcve), который демонстрирует вашу проблему. Это не дамп кода, а пример того, что вы делаете, что подчеркивает проблему, с которой вы сталкиваетесь. Это приведет к меньшему путанице и лучшим ответам – MadProgrammer

+0

"* Почему таблица всегда обновляет рендеринг таблицы из первой строки? Есть ли способ отобразить только следующую строку без перепечатки того, что уже было напечатано в первой строке." * - ' JTable' сильно оптимизирован для уменьшения накладных расходов при рисовании большого количества строк. Невозможно было бы рисовать видимую область, в которой произошли обновления, поскольку это то, как работает живопись. То, что он пытается сделать, - это не области рисования таблицы, которые не видны. – MadProgrammer

ответ

0

Я интересно, если приложение управления Раздел объекты правильно. Пожалуйста, убедитесь, что каждый addElement работает с другим экземпляром раздела объекта, а не повторно использовать один и тот же объект или обнулять его поля после добавления к модели таблицы:

Пожалуйста, попробуйте сделать следующее, чтобы убедиться, таблица получает уникальный объект, который не изменял снаружи:

public void addElement(Section addValue) { 
    Section sec = new Section(); 
    // TODO copy fields 
    daten.add(sec); 
    fireTableRowsInserted(daten.size() - 1, daten.size() - 1); 
} 
+0

Итак, вы просто игнорируете, что передано методу? – MadProgrammer

+0

Это проверяет, не изменил ли исходный код объект после его добавления. –

+0

Так, другими словами, он не «отвечает» на вопрос, а просит уточнить проблему ... – MadProgrammer

0

Поскольку я не мог понять, как решить эту проблему, я использовал простой DefaultTableModel вместо этого и взял данные в массиве и заселен таблица динамически грести по строкам. Это тоже легко. Спасибо за вашу помощь и комментарии.