Question

Simple question, mais je ne peux pas sembler trouver la réponse en ligne partout.

Comment utilisez-vous un TableCellRenderer personnalisé pour rendre certaines des cellules de table en gras?

Je sais comment utiliser TableCellRenderer pour définir la couleur d'arrière-plan, cellule par cellule. Vous faites quelque chose comme:

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

Je suppose de changer le style de texte de rendu est similaire, mais comment avez-vous mis la police à être la même que la police de table par défaut, mais en caractères gras?

Était-ce utile?

La solution

Si vous pouvez déjà obtenir la police de table par défaut (que je suppose serait c.getFont()), puis il suffit d'utiliser deriveFont(Font.BOLD) sur elle.

Autres conseils

Vous pouvez également envisager ligne de tableau Approche de rendu qui peut vous donner un peu plus de flexibilité dans le contrôle de laquelle les cellules vous changez la police pour. Je l'ai utilisé pour la mise en gras le texte dans toutes les colonnes de la ligne sélectionnée.

Police de réglage en gras avec la mise en cache, comme décrit ici déjà, fonctionnera.

Dans le cas où vous avez besoin de mettre seulement une partie de texte en gras - HTML utilisation. équarrisseurs Table des cellules sont basées sur JLabel (ou vous pouvez retourner un). La conversion de votre texte en html permettra presque tout changement d'attribut de texte.

Nous utilisons largement cette technique et ne voit pas de dégradation significative des performances.

Voici l'approche de l'homme paresseux: Utilisez DefaultTableCellRenderer (qui est une sous-classe de JLabel) et utiliser HTML pour spécifier si vous souhaitez utiliser une police de caractères gras

.

Il ne sera pas aussi performant que la définition de votre propre moteur de rendu personnalisé et le contrôle des polices directement, mais le code est généralement plus compact, est bon pour des applications 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);
  }
}

vous pouvez utiliser aussi ..

        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;

    }

}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top