Как форматировать содержимое JTable

#java #swing #formatting #jtable

#java #swing #форматирование #jtable

Вопрос:

Я использую JTable для отображения числовых данных и строк. Числовые данные по умолчанию форматируются в правой части JTable, а строки форматируются слева. Я хочу, чтобы оба были отформатированы в центре ячейки. Я использую Nedbeans для разработки графического интерфейса, но, похоже, это не помогает в решении этой проблемы.

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

Любая помощь будет оценена.

Ответ №1:

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

  public static class CustomTableCellRenderer extends DefaultTableCellRenderer {    
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            DefaultTableCellRenderer c = (DefaultTableCellRenderer) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

            // center everything in the first column
            if (column == 0) {
                c.setHorizontalAlignment(JLabel.CENTER);
            }

            // the background and border of the first cell should be gray
            if (column == 0 amp;amp; row == 0) {
                c.setBackground(Color.GRAY);
                c.setBorder(BorderFactory.createMatteBorder(0, 5, 0, 5, Color.GRAY));
            }

            return c;
        }
 }
  

Пожалуйста, обратите внимание, что DefaultTableCellRenderer вызывается для каждой отдельной ячейки.

Все доступные функции форматирования хорошо описаны в соответствующей документации: https://docs.oracle.com/javase/10/docs/api/javax/swing/table/DefaultTableCellRenderer.html