Swing: TableCellRenderer, который использует жирный шрифт для некоторых ячеек - PullRequest
2 голосов
/ 09 февраля 2010

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

Как использовать пользовательский 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
    }
  }

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

Ответы [ 5 ]

5 голосов
/ 09 февраля 2010

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

5 голосов
/ 09 февраля 2010

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

1 голос
/ 09 февраля 2010

Вот подход ленивца: используйте 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);
  }
}
1 голос
/ 09 февраля 2010

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

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

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

0 голосов
/ 09 февраля 2010

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

        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;

    }

}
...