Как редактировать DefualtTableCellRenderer в Java? - PullRequest
2 голосов
/ 15 февраля 2012

У меня проблема с редактированием DefaultTableCellRenderer.

Я бы хотел выровнять по правому краю только 2-й столбец в моей таблице. Однако код ниже справа выравнивает все столбцы, а не только 2-й!

Кто-нибудь может увидеть, где я иду не так?

for (int i=0; i < tblMenu.getModel().getColumnCount(); i++) 
{ 
    DefaultTableCellRenderer renderer = 
        (DefaultTableCellRenderer) tblMenu.getCellRenderer(i, 1);

    renderer.setHorizontalAlignment(JTextField.RIGHT); 
}

Ответы [ 3 ]

3 голосов
/ 15 февраля 2012

Вы можете переопределить рендерер по умолчанию на вашей таблице анонимным внутренним классом.Может работать что-то вроде следующего (непроверенного) кода:

table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            if (column == 2) {
                setHorizontalAlignment(JTextField.RIGHT);
            }
            return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        }

    });
1 голос
/ 15 февраля 2012

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

Но еще проще, если в вашем столбце содержатся числовые данные, просто переопределите getColumnClass(...) модели таблицы, чтобы получить Integer.class для этого столбца, и таблица будет отформатирована для вас правильно. Или, если вы знаете, что ваша таблица не будет пустой, просто позвольте ее данным рассказать миру, какой тип это тип, и пусть JTable отображает вещи так, как должно:

// if the table isn't empty, this will work.
class MyDTableModel extends DefaultTableModel {
  public Class<? extends Object> getColumnClass(int c) {
     return getValueAt(0, c).getClass();
  }
}
1 голос
/ 15 февраля 2012

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

DefaultTableCellRenderer righty = new DefaultTableCellRenderer();
righty.setHorizontalAlignment(JTextField.RIGHT);

tblMenu.getColumnModel().getColumn(1).setCellRenderer(righty);

Может быть, немного проще, чем A Lee (в зависимости от того, сколько других настроек вы делаете).

...