Получение значений целых ячеек JTable с форматированием ячеек

#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();
}
  

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