У меня есть проблема, от которой я не могу избавиться.
Просто чтобы вы знали, я новичок в использовании JTables, поэтому ответ может быть простым, но я не могу найти решение:/
Итак, у меня есть JTable, использующий AbstractTableModel, который переопределяет
public Class<?> getColumnClass(int columnIndex_p)
метод, чтобы указать тип каждого отображаемого столбца. Один из них булев.
Когда я создаю простой JTable, используя
table_l = new JTable(new MyTableModel());
все нормально, булевы значения корректно отображаются с помощью флажков (вкл/выкл).
Теперь я хотел бы центрировать текст в каждой ячейке (и, возможно, больше вариантов позже).
Поэтому я определяю новый DefaultTableCellRenderer для каждого столбца, например:
DefaultTableCellRenderer cellRenderer_l = new DefaultTableCellRenderer() {
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
// delegate the rendering part to the default renderer (am i right ???)
Component comp = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
return comp;
}
}
а затем я просто устанавливаю горизонтальное выравнивание этого CellRender с помощью:
cellRenderer_l.setHorizontalAlignment(JLabel.CENTER);
Затем я устанавливаю этот новый CellRenderer в каждый столбец JTable:
for (int i = 0; i < table_l.getColumnCount(); ++i) {
table_l.getColumnModel().getColumn(i).setCellRenderer(cellRenderer_l);
}
Но с новым CellRenderer отображаемый JTable больше не использует метод getColumnClass() моей TableModel и, таким образом, просто отображает строку «true/false» для логических значений.
Я не знаю, как заставить его по-прежнему использовать getColumnClass(), как раньше.
Если у кого-то есть ответ... Спасибо
РЕДАКТИРОВАТЬ: спасибо за все разъяснения, которые вы сделали. Фактически, мой настоящий вопрос был: «Как повлиять на все DefaultRenderer JTable, чтобы они центрировали свой результат в ячейках JTable»