2015-11-18 2 views
-1

У меня есть функция, которая проходит через CSV-файл и генерирует значение DefaultTableModel данных (которое затем отображается в JTable). Эта функция:Добавить флажок в JTable, который был сгенерирован из CSV

public DefaultTableModel createTableModel(Reader in, Vector<Object> headers) { 
     DefaultTableModel model = null; 
     Scanner s = null; 
     Vector<Object> c; 
     try { 
      Vector<Vector<Object>> rows = new Vector<Vector<Object>>(); 
      s = new Scanner(in); 
      while (s.hasNextLine()) { 
       rows.add(new Vector<Object>(
         Arrays.asList(s.nextLine().split("\\s*,\\s*", -1)))); 
      } 
      if (headers == null) { 
       headers = rows.remove(0); 
       model = new DefaultTableModel(rows, headers); 
      } else { 
       model = new DefaultTableModel(rows, headers); 
      } 
      return model; 
     } finally { 
      s.close(); 
     } 
    } 

Однако, я хотел бы изменить этот код, чтобы добавить флажок в первой колонке данных (которые я добавил в качестве шаблона при создании CSV-файла в любом случае в качестве столбца с заголовком " Selected "), который заполняет логическое значение false для каждой строки.

Проблема в том, что я не знаю, где в моем коде должно появиться что-то вроде ниже (после прочтения онлайн я вижу, что так вы можете получить JTable для автогенерации текстовых полей выбора, установив класс столбец до Boolean). Обратите внимание, что здесь столбец «Selected» в колонке 1 жёстко:

{ 
    public Class getColumnClass(int column) { 
     if(column==1){ 
         return Boolean.class; 
     }else return String.class; 
     } 
}; 

Должен быть определен (я предполагаю, что должно быть в функции выше).

+0

Кстати, ['' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''' '' '' '(http://stackoverflow.com/questions/1386275/why-is-java-vector-class-considered-obsolete-or-deprecated) –

ответ

1

Вместо того, чтобы писать функцию, которая создает DefaultTableModel, вы можете создать подкласс DefaultTableModel и добавить переопределить функции, которые вам нужны ..

Если вы хотите, чтобы первый столбец, он должен быть 0, а не 1. И вы будете вероятно, также необходимо переопределить getValueAt(), чтобы фактически вернуть логическое значение.