2013-04-10 1 views
1

У меня есть вектор с элементами HashMap. Я хочу поместить его в таблицу, и каждое значение HashTable должно находиться в столбце с заголовком столбца HashTable. Таким образом, элементы с ключом «ключ1» должны появиться в столбце таблицы с именем «key1».Добавить/удалить больше столбцов в JTable из пользовательского AbstractTableModel

Проблема: При попытке добавить/удалить столбики таблицы с помощью функции setHash(). Я передаю String [] с большим количеством элементов, и когда эта функция запускает fireTableStructureChanged(), java бросает как сумасшедший.

Я не понимаю, где проблема. Не могли бы вы мне помочь?

Реализация таблицы модели здесь:

public class ResizableTableModel extends AbstractTableModel { 
    protected DataSource src; 
    protected String[] hash; 

    //...................... 

    public void setHash(String[] hash) { 
     this.hash = hash; 
     fireTableStructureChanged(); // THROWS! 
    } 

    public ArrayList getData() { return src.getData(); } 
    public int getColumnCount() { return hash.length; } 
    public int getRowCount() { return getData() == null ? 0 : getData().size(); } 
    public String getColumnName(int col) { return hash[col]; } 
    public boolean isCellEditable(int row, int col) { return true; } 
    public Object getValueAt(int row, int col) { 
    try { 
     return ((HashMap) getData().get(row)).get(hash[col]); 
    } catch (Exception e) { 
     return null; 
    } 
    } 
    public void setValueAt(Object obj, int row, int col) { 
    try { 
     //................... 
    } catch (Exception e) {} 
    fireTableDataChanged(); 
    } 
} 
+0

HashMap отсутствует индексация, необходимо использовать List вместо – mKorbel

+0

_I не понимаю, где проблема. И кому-то будет трудно выяснить, где проблема, так как ваш код неполный, и вы не говорите нам, какие исключения вы получаете, и на какой строке это происходит. Рассмотрите возможность публикации [SSCCE] (http://sscce.org) –

ответ

3
+0

Но 'JTable' был создан из' XxxTableModel'. Невозможно полностью восстановить «JTable» из «XxxTableModel» без замены новым «JTable»? – Chameleon

+1

@Chameleon не является базовым свойством, по умолчанию там нет проблемы с добавлением/удалением/модификацией строки/столбца/ячейки, я бы предложил начать с DefaultTableModel, тогда есть снижение воздействия извне, все методы доступны из JTable , то же, что и у DeafultTableModel, требуется использование преждевременного массива или вектора, но нет никакой разницы с HashMap, использование AbstractTableModel требует глубоких знаний о TableModel и используемого массива, уменьшает это до необходимого минимума, а затем переключается с DefaultTableModel на AbstractTableModel (a несколько строк кода кроме того) – mKorbel