Выровнять значения ячеек в 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
Ответы
Ответ 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);
}
}