Подтвердить что ты не робот

Выровнять значения ячеек в JTable?

Я не знаю, как выровнять значения ячеек в JTable.

Для Ex, Jtable показывает,      Название Зарплата      Mr.X 100000.50      XXXX 234,34      YYYy 1205.50

Я хочу выровнять "Оклады" в следующем формате.

   Name      Salary
   Mr.X      100000.50
   XXXX         234.34
   YYYy        1205.50

Как выровнять, как указано выше, JTable

4b9b3361

Ответ 1

Нет необходимости создавать для этого настраиваемый класс, просто используйте средство рендеринга по умолчанию:

DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
rightRenderer.setHorizontalAlignment(SwingConstants.RIGHT);
table.getColumnModel().getColumn(???).setCellRenderer(rightRenderer);

Или лучший подход состоит в том, чтобы фактически хранить двойные значения в таблице, а затем использовать правильный числовой рендеринг, а рендеринг числа автоматически выравнивается по правому краю. Затем вы можете настроить форматирование числа, используя Редактор формата таблицы.

Ответ 2

Нам нужно сделать небольшую коррекцию, правильный путь DefaultTableCellRenderer.RIGHT

DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
rightRenderer.setHorizontalAlignment(DefaultTableCellRenderer.RIGHT);
tableExample.getColumn("Price").setCellRenderer( rightRenderer );

Обратите внимание на разницу с исходным ответом camickr, "Цена" - это имя столбца, измените его в зависимости от случая.

Ответ 3

От этот пост форума:

Создайте класс, который расширяет DefaultTableCellRenderer и реализует метод getTableCellRendererComponent(), например:

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
    JLabel renderedLabel = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
    renderedLabel.setHorizontalAlignment(SwingConstant s.RIGHT);
    return renderedLabel;
}

и установите этот рендерер для соответствующего столбца.

Теперь вам нужно только убедиться, что каждое значение имеет одинаковое количество десятичных знаков, потому что для большинства шрифтов все цифры имеют одинаковую ширину.

Ответ 4

Простым способом является метод DefaultTableModel и переопределения getColumnClass()
Пример:

DefaultTableModel model = new DefaultTableModel() {
        @Override
        public Class getColumnClass(int columnIndex) {
            if (columnIndex == 0) {
                return Integer.class;
            } else {
                return String.class;
            }
        }
    };

Если вы возвращаете Integer, ваш столбец будет выравнивать правый anh, если возвращает String, столбец будет выравниваться влево.

Ответ 5

У меня есть метод, который выравнивает столбец в таблице справа:

private void alignRight(JTable table, int column) {
    DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
    rightRenderer.setHorizontalAlignment(JLabel.RIGHT);
    table.getColumnModel().getColumn(column).setCellRenderer(rightRenderer);
}

Ответ 6

Путь к этому состоит в том, чтобы указать для каждого столбца средство отображения ячеек. Каждый рендерер будет форматировать эти данные по-разному (имена выравниваются влево, десятичные знаки справа,...)

Ответ 7

как для более чем одной таблицы сразу мне удалось это сделать... ее как @camickr отправлено, но я добавил заголовки тоже

    DefaultTableCellRenderer rightRenderer_c = new DefaultTableCellRenderer();
    DefaultTableCellRenderer rightRenderer_h = new DefaultTableCellRenderer();
    rightRenderer_c.setHorizontalAlignment( javax.swing.JLabel.RIGHT );

    for(JTable t : Tables){ //Tables is an ArrayList<JTable>

        //for the headers :
        rightRenderer_h = (DefaultTableCellRenderer) t.getTableHeader().getDefaultRenderer();
        rightRenderer_h.setHorizontalAlignment( javax.swing.JLabel.RIGHT );

        //for cells :
        for(int i=0; i < t.getColumnCount(); i++){
            t.getColumnModel().getColumn(i).setCellRenderer(rightRenderer_c);
        }
    }