Выравнивание ячейки JTable сделано правильно, не работает - PullRequest
0 голосов
/ 10 апреля 2020

Я новичок в использовании 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

По какой-то причине выравнивания текста ячейки остаются по умолчанию слева выравнивание. Что-то в конфигурации моей таблицы препятствует вступлению в силу новых выравниваний?

...