Я новичок в использовании JTable, но я провел много исследований по этой проблеме. Судя по всему, я правильно реализовал выравнивание текста в ячейке, но это не работает. Я подкласс JTable, чтобы настроить его следующим образом:
public class BasicJTable extends JTable {
public BasicJTable(Object[][] rowData, Object[] columnNames, int[] alignments) {
super(new DefaultTableModel(rowData, columnNames) {
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
});
setColumnAlignments(alignments);
setFillsViewportHeight(true);
setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
getTableHeader().setReorderingAllowed(false);
setAutoCreateRowSorter(true);
((DefaultRowSorter) getRowSorter()).setSortsOnUpdates(true);
}
private void setColumnAlignments(int[] alignments) {
// I also tried renderer.setHorizontalAlignment but neither works
for(int i = 0; i < alignments.length; i++) {
if(alignments[i] == SwingConstants.CENTER) {
DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
renderer.setHorizontalTextPosition(DefaultTableCellRenderer.CENTER);
getColumnModel().getColumn(i).setCellRenderer(renderer);
}
else if(alignments[i] == SwingConstants.RIGHT) {
DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
renderer.setHorizontalTextPosition(DefaultTableCellRenderer.RIGHT);
getColumnModel().getColumn(i).setCellRenderer(renderer);
}
}
}
}
Я установил значения массива выравнивания следующим образом:
int[] align = new int[COLUMN_COUNT];
for(int i = 0; i < align.length; i++) {
align[i] = SwingConstants.CENTER; // set all to center align
}
align[4] = SwingConstants.RIGHT;// single out the special case
По какой-то причине выравнивания текста ячейки остаются по умолчанию слева выравнивание. Что-то в конфигурации моей таблицы препятствует вступлению в силу новых выравниваний?