Pergunta

pergunta simples, mas eu não consigo encontrar a resposta em qualquer lugar on-line.

Como você usa um TableCellRenderer personalizado para tornar algumas das células da tabela em negrito?

Eu sei como usar TableCellRenderer para definir a cor de fundo em uma base célula por célula. Você fazer algo como:

  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
    }
  }

Eu diria que mudar o estilo de texto de renderização é semelhante, mas como você definir o tipo de letra a ser o mesmo que a fonte de tabela padrão, mas em negrito?

Foi útil?

Solução

Se você já pode começar a fonte de tabela padrão (que suponho seria c.getFont()), então é só usar deriveFont(Font.BOLD) nele.

Outras dicas

Você também pode querer considerar a Tabela Row Rendering Abordagem , que pode dar-lhe um pouco mais de flexibilidade no controle de quais as células que você alterar a fonte para. Eu usei-o para negrito o texto em todas as colunas da linha selecionada.

Configuração para Negrito com o cache, como descrito já está aqui, vai funcionar.

No caso de você precisa definir apenas parte do texto em negrito - use HTML. prestadores de célula de tabela são baseados em JLabel (ou você pode retornar um). Convertendo seu texto para html vai permitir que praticamente qualquer alteração de atributo de texto.

Nós usamos esta técnica extensivamente e não viu qualquer degradação significativa do desempenho.

Aqui está a abordagem do homem preguiçoso:. Use DefaultTableCellRenderer (que é uma subclasse de JLabel) e uso de HTML para especificar quando você quiser usar um negrito

Não vai ser tão alto desempenho como a definição de seu próprio processador personalizado e controlar as fontes diretamente, mas o código é geralmente mais compacto, é bom para aplicações simples.

/**
 * 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);
  }
}

Você pode usar isso também ..

        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;

    }

}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top