Pregunta

Pregunta simple, pero parece que no puedo encontrar la respuesta en ningún lugar en línea.

¿Cómo se utiliza un TableCellRenderer personalizado para representar algunas de las celdas de la tabla en negrita?

Sé cómo usar TableCellRenderer para establecer el color de fondo celda por celda.Haces 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
    }
  }

Supongo que cambiar el estilo del texto representado es similar, pero ¿cómo se configura la fuente para que sea la misma que la fuente predeterminada de la tabla pero en negrita?

¿Fue útil?

Solución

Si ya se puede conseguir la fuente de tabla por defecto (que supongo que serían c.getFont()), a continuación, sólo tiene que utilizar deriveFont(Font.BOLD) en él.

Otros consejos

También es posible que desee considerar la de fila de tabla representación enfoque que le puede dar un poco más de flexibilidad en el control de las células, que se cambia el tipo de letra para. Lo he utilizado para las negritas del texto en todas las columnas de la fila seleccionada.

configuración de fuente en negrita con el almacenamiento en caché, como se describe ya está aquí, va a funcionar.

En caso de que necesite para establecer sólo una parte del texto en negrita - el uso de HTML. procesadores de celdas tabla se basan en JLabel (o puede devolver uno). Convertir el texto a html permitirá casi cualquier cambio de atributo de texto.

Utilizamos esta técnica ampliamente y no vimos ninguna degradación significativa del rendimiento.

Aquí está el enfoque del hombre perezoso:Usar DefaultTableCellRenderer (que es una subclase de JLabel) y utilice HTML para especificar cuándo desea utilizar un tipo de letra en negrita.

No será tan eficaz como definir su propio renderizador personalizado y controlar las fuentes directamente, pero el código es generalmente más compacto, por lo que es bueno para aplicaciones 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);
  }
}

puede utilizar esto también ..

        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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top