#java #swing #jtable #number-formatting
#java #swing #jtable #форматирование чисел
Вопрос:
У меня есть JTable со столбцом, содержащим целочисленные значения, которые отформатированы для добавления разделителя тысяч. Я могу получить значение столбцов, используя model.getValueAt()
или table.getValueAt()
, но значения не имеют форматирования. Как я могу получить значение ячейки с форматированием?
Код для форматирования ячейки:
table.getColumnModel().getColumn(5).setCellRenderer(new NumberTableCellRenderer());
Код для класса, который обрабатывает форматирование ячеек:
public static class NumberTableCellRenderer extends DefaultTableCellRenderer {
private static final long serialVersionUID = 1L;
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (value instanceof Number) {
value = NumberFormat.getNumberInstance().format(value);
}
return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
}
}
Комментарии:
1. «значения не имеют форматирования» Форматирование должно быть только у визуальных представлений чисел. Отформатируйте число так, как оно отображается в другом месте, но внутренне сохраните целое число.
2. Я голосую за закрытие этого вопроса, потому что это проблема XY . Это должно быть решено с использованием совершенно другого подхода.
Ответ №1:
Как я могу получить значение ячейки с форматированием?
Вам потребуется повторно применить логику рендеринга. Что-то вроде:
TableCellRenderer renderer = table.getCellRenderer(row, column);
Component c = table.prepareRenderer(renderer, row, column);
if (c instanceof JLabel)
{
JLabel label = (JLabel)c;
String formatted = label.getText();
}
Однако при этом вы получите только строковое значение. Он не получит никакой цветопередачи, поскольку строка не содержит подобной информации.