Я создал JTable
. Заголовок столбца называется "Export"
с флажком. Когда мы устанавливаем флажок заголовка, флажки во всех строках также должны быть отмечены.
Вот мой код:
private void initializeTable() {
tableModel = (DefaultTableModel) locationJTable.getModel();
locationJTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
tableModelListener = new TableModelListener() {
@Override
public void tableChanged(TableModelEvent e) {
processTableChange(e);
}
};
locationJTable.getModel().addTableModelListener(tableModelListener);
tableSelectionListener = new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
//processSelection(e);
}
};
locationJTable.getSelectionModel().addListSelectionListener(tableSelectionListener);
Map<String, TableColumn> columns = new HashMap<String, TableColumn>() {
{
put("Export", locationJTable.getColumnModel().getColumn(INDEX_OF_THE_EXPORT_COLUMN));
}
};
for (Map.Entry<String, TableColumn> entry : columns.entrySet()) {
TableColumn column = entry.getValue();
ItemListener itemListener = (ItemEvent e)
-> {
Object source = e.getSource();
if (source instanceof AbstractButton == false) {
return;
}
boolean checked = e.getStateChange() == ItemEvent.SELECTED;
for (int x1 = 0, y1 = locationJTable.getRowCount(); x1 < y1; x1++) {
**if ((boolean) locationJTable.getValueAt(x1, column.getModelIndex()) != checked)** {
locationJTable.setValueAt(checked, x1, column.getModelIndex());
}
}
};
boolean selected = true;
if (entry.getKey().equals("Export")) {
selected = false;
}
CheckBoxHeader header = new CheckBoxHeader(itemListener, selected, entry.getKey(), column.getModelIndex());
locationJTable.getTableHeader().setBackground(new Color(255, 255, 255));
column.setHeaderRenderer(header);
checkBoxHeaders.put(header, itemListener);
}
}
Я вызываю эту функцию в конструкторе. Когда я ставлю флажок в заголовке вместо того, чтобы устанавливать другие флажки, он показывает NullPointerException
. Но если я сначала поставлю флажок в строке, а затем поставлю флажок в заголовке, он отметит все остальные флажки в строках таблицы, как и ожидалось. locationJTable.getValueAt(x1, column.getModelIndex()
показывает null
при отладке во время попадания исключения.
Почему?