Domanda

semplice domanda, ma non posso sembrare trovare la risposta da nessuna parte online.

Come si usa un TableCellRenderer personalizzato per rendere alcune delle celle della tabella in grassetto?

Io so come usare TableCellRenderer per impostare il colore di sfondo su una cellula per cellula. Fai qualcosa come:

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

Vorrei assumere cambiando lo stile del testo di rendering è simile, ma come si fa a impostare il carattere per essere lo stesso come il tipo di carattere tabella predefinita, ma in grassetto?

È stato utile?

Soluzione

Se si può già ottenere il tipo di carattere tabella di default (che suppongo sarebbe c.getFont()), poi basta usare deriveFont(Font.BOLD) su di esso.

Altri suggerimenti

Si potrebbe anche prendere in considerazione la Table Row Approccio di rendering che potrebbe dare un po 'più di flessibilità nel controllo cui le cellule si modifica il tipo di carattere per. L'ho usato per il grassetto il testo in tutte le colonne della riga selezionata.

impostazione dei font in grassetto con la cache, come descritto già qui, funzionerà.

Nel caso in cui è necessario impostare solo una parte del testo in grassetto - uso HTML. renderer di celle tabella si basano su JLabel (o si può restituire uno). La conversione il testo in html permetterà quasi tutte le modifiche attributo di testo.

Usiamo questa tecnica ampiamente e non abbiamo visto alcun degrado significativo delle prestazioni.

Ecco l'approccio del pigro: Usa DefaultTableCellRenderer (che è una sottoclasse di JLabel) e usare l'HTML per specificare quando si desidera utilizzare un carattere grassetto

.

Non sarà come performante come la definizione proprio renderer personalizzato e controllare direttamente i font, ma il codice è generalmente più compatta così è un bene per le applicazioni più semplici.

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

è possibile utilizzare anche questo ..

        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;

    }

}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top