Качать:TableCellRenderer, который использует жирный шрифт для некоторых ячеек

StackOverflow https://stackoverflow.com/questions/2224865

Вопрос

Простой вопрос, но я не могу найти ответ нигде в Интернете.

Как использовать пользовательский TableCellRenderer для отображения некоторых ячеек таблицы жирным шрифтом?

Я знаю, как использовать TableCellRenderer для установки цвета фона для каждой ячейки.Вы делаете что-то вроде:

  public class MyTableCellRenderer extends DefaultTableCellRenderer 
  {
    @Override public Component getTableCellRendererComponent(JTable table,
       Object value, boolean isSelected, boolean hasFocus, int row, int column)
    {
        Component c = super.getTableCellRendererComponent(table, value,
          isSelected, hasFocus, row, column);
        // modify the component "c" to have whatever attributes you like
        // for this particular cell
    }
  }

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

Это было полезно?

Решение

Если вы уже можете получить шрифт таблицы по умолчанию (который, я полагаю, будет c.getFont()), затем просто используйте deriveFont(Font.BOLD) в теме.

Другие советы

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

Установка жирного шрифта с кэшированием, как уже описано здесь, будет работать.

Если вам нужно выделить только часть текста жирным шрифтом — используйте HTML.Средства визуализации ячеек таблицы основаны на JLabel (или вы можете вернуть его).Преобразование текста в HTML позволит изменить практически любые атрибуты текста.

Мы широко используем этот метод и не заметили какого-либо значительного снижения производительности.

Вот подход ленивого человека:Использовать DefaultTableCellRenderer (который является подклассом JLabel) и используйте HTML, чтобы указать, когда вы хотите использовать жирный шрифт.

Это будет не так эффективно, как определение собственного средства визуализации и непосредственное управление шрифтами, но код, как правило, более компактен, поэтому подходит для простых приложений.

/**
 * Renderer implementation for rendering Strings.
 * Strings beginning with 'A' are rendered in bold.
 */
public class MyRenderer extends DefaultTableCellRenderer {
  public Component getTableCellRendererComponent(JTable table,
                                               Object value,
                                               boolean isSelected,
                                               boolean hasFocus,
                                               int row,
                                               int column) {

    String txt = String.valueOf(value);

    if (txt != null && txt.startsWith("A")) {
      // Reassign value as an HTML string.
      // Obviously need to consider replacing HTML special characters
      // if doing this properly.
      value = String.format("<body><b>%s</b></body>", txt);
    }

    // Delegate to superclass which will set the label text, background, etc.
    return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
  }
}

вы также можете использовать это..

        class SampleRenderer extends DefaultTableCellRenderer
        {

        public Component getJtableCellRendererComponent(Jtable table,Object value,boolean     isSelected , boolean hasFocus , int row, int column)

        {

        JLabel c = (JLabel)super.getJtableCellRendererComponent(table,value,isSelected ,hasFocus , row, column);

        Font f = c.getFont();

        c.setFont(f.getName(),Font.BOLD,f.getSize()));

        return c;

    }

}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top