Как JavaDocs для DefaultTableModel
выделяет
Предупреждение: DefaultTableModel
возвращает класс столбца
Object
... Если вы используете DefaultTableModel
... вы сильно
рекомендуется переопределить getColumnClass
для возврата соответствующего
типа.
Хотя комментарий относится к использованию TableRowSorter
, он подчеркивает основную причину вашей проблемы. getColumnClass
возвращает тип Object
, что означает, что он не позволяет использовать рендеры по умолчанию для таких типов, как Boolean
.
Вместо этого вам нужно будет создать собственную реализацию TableModel
(я предпочитаю AbstractTableModel
, но вы все равно можете использовать DefaultTableModel
), переопределить getColumnClass
и вернуть более подходящее значение для конкретного столбца, например ...
![Picky](https://i.stack.imgur.com/nu4qx.png)
import java.awt.EventQueue;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class Test extends JFrame {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
DefaultTableModel model = new DefaultTableModel() {
@Override
public Class<?> getColumnClass(int columnIndex) {
return Boolean.class;
}
};
model.addColumn("Pick");
Random rnd = new Random();
for (int index = 0; index < 10; index++) {
Object[] row = new Object[1];
row[0] = rnd.nextBoolean();
model.addRow(row);
}
JTable table = new JTable(model);
JFrame frame = new JFrame();
frame.add(new JScrollPane(table));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
Примечание Это простой пример, если у вас есть несколько столбцов, вам нужно будет решить, что возвращать для каждого столбца