JTable + getColumnClass () возвращает ноль, если ячейка содержит NULL - PullRequest
4 голосов
/ 22 ноября 2011

Я пытаюсь отсортировать мой JTable, расширяя DefaultTableModel и переопределяя getColumnClass () следующим образом:

 public Class getColumnClass(int c) {     

  return getValueAt(0, c).getClass();
}

Это прекрасно работает, если в этой ячейке таблицы нет NULL. Поэтому я изменил его следующим образом:

  public Class getColumnClass(int c) {


  for(int rowIndex = 0; rowIndex < data.size(); rowIndex++){

    Object[] row = data.get(rowIndex);

    if (row[c] != null) {
        return getValueAt(rowIndex, c).getClass();
    }
  }
  return getValueAt(0, c).getClass();
 }

Теперь, опять же, все работает нормально, если в столбце есть хотя бы одна ячейка, которая не равна NULL. Но если все ячейки в столбце имеют значение NULL, это не сработает (потому что возвращает nullPointerException).

Пожалуйста ............ помогите .... заранее спасибо

Hasan

Ответы [ 5 ]

6 голосов
/ 22 ноября 2011

Знаете ли вы, какого типа вы ожидаете, что каждый столбец будет содержаться до этого?

Если это так, вы можете создать массив с объектами класса и просто вернуть соответствующий.

Class[] columns = new Class[]{String.class, String.class, Date.class};

public Class getColumnClass(int c) {  
     return columns[c];
}
3 голосов
/ 22 ноября 2011

Это общий код, который я использую:

    JTable table = new JTable(data, columnNames)
    {
        public Class getColumnClass(int column)
        {
            for (int row = 0; row < getRowCount(); row++)
            {
                Object o = getValueAt(row, column);

                if (o != null)
                {
                    return o.getClass();
                }
            }

            return Object.class;
        }
    };
0 голосов
/ 23 февраля 2013

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

public Class getColumnClass(int c) {  
  int columnCount;
  // dataModel is an object of the data Model class(default or abstract)
  columnCount=dataModel.getRowCount();
    if(columnCount<=1){
       return String.class;
    }
    return getValueAt(0, c).getClass();
}
0 голосов
/ 23 ноября 2011
public Class getColumnClass(int c) 
    {     
    for(int rowIndex = 0; rowIndex < data.size(); rowIndex++)
    {
        Object[] row = data.get(rowIndex);
        if (row[c] != null) {
            return getValueAt(rowIndex, c).getClass();
        }   
    }
    return String.class;
}

Исправлена ​​проблема с возвратом String.class , если все ячейки в столбце равны NULL

0 голосов
/ 22 ноября 2011

Выберите тип «по умолчанию». return String.class; это довольно безопасное решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...