Я столкнулся со странным поведением из JTable (JDK 1.5_22):
После изменения выбора в таблице и при некоторых неизвестных конкретных обстоятельствах JTable вызовет средство визуализации ячеек со значением 'null' для параметра значения.
В конечном итоге это приведет к приятному «исключению нулевого указателя» для пользовательского кода рендерера, который не готов к такому грубому вызову.
Вот виновный метод (JTable.java, строка 5319):
public Accessible getAccessibleChild(int i) {
if (i < 0 || i >= getAccessibleChildrenCount()) {
return null;
} else {
// children increase across, and then down, for tables
// (arbitrary decision)
int column = getAccessibleColumnAtIndex(i);
int row = getAccessibleRowAtIndex(i);
TableColumn aColumn = getColumnModel().getColumn(column);
TableCellRenderer renderer = aColumn.getCellRenderer();
if (renderer == null) {
Class<?> columnClass = getColumnClass(column);
renderer = getDefaultRenderer(columnClass);
}
Component component = renderer.getTableCellRendererComponent(
JTable.this, null, false, false,
row, column);
return new AccessibleJTableCell(JTable.this, row, column,
getAccessibleIndexAt(row, column));
}
}
и вот фокус на ошибочном утверждении:
Component component = renderer.getTableCellRendererComponent(
JTable.this, null, false, false,
row, column);
Спрашивать Google с «JTable getAccessibleChild 5334» было интересно: я не один, чтобы столкнуться с этой «функцией». Но ответа не было.
Наиболее хорошо сформулированный вопрос находится на официальном солнечном форуме .
Кто-нибудь знает об этом?