Выровнять значения ячеек в JTable? - PullRequest
23 голосов
/ 09 марта 2010

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

Например, Jtable показывает, Имя Зарплата Mr.X 100000.50 XXXX 234,34 ГГГГ 1205.50

Я хочу выровнять «Зарплаты» в следующем формате.

   Name      Salary
   Mr.X      100000.50
   XXXX         234.34
   YYYy        1205.50

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

Ответы [ 7 ]

42 голосов
/ 09 марта 2010

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

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

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

8 голосов
/ 23 августа 2012

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

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

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

5 голосов
/ 31 июля 2013

Простой способ - использовать DefaultTableModel и метод переопределения. getColumnClass ()
Пример:

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

Если вы вернете Integer, ваш столбец будет выровнен вправо и, если return String, ваш столбец будет выровнен влево.

4 голосов
/ 09 марта 2010

Из этого сообщения на форуме :

Создайте класс, расширяющий 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;
}

и установите этот рендерер для рассматриваемой колонки.

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

3 голосов
/ 24 мая 2011

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

private void alignRight(JTable table, int column) {
    DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
    rightRenderer.setHorizontalAlignment(JLabel.RIGHT);
    table.getColumnModel().getColumn(column).setCellRenderer(rightRenderer);
}
0 голосов
/ 25 февраля 2014

как для более чем одной таблицы одновременно, мне удалось сделать это ... как писал @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);
        }
    }
0 голосов
/ 09 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...