Frage

Einfache Frage, aber ich kann nicht überall online scheinen, um die Antwort zu finden.

Wie verwenden Sie eine benutzerdefinierte Table einige der Tabellenzellen in Fettschrift zu machen?

Ich weiß, wie Table verwenden, um die Hintergrundfarbe auf einer Zelle-für-Zelle-Basis einzustellen. Sie tun so etwas wie:

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

Ich würde davon ausgehen, der Rendering-Textstil ist ähnlich zu ändern, aber wie kann man die Schriftart die gleiche wie die Standardtabelle Schrift aber fett sein?

War es hilfreich?

Lösung

Wenn Sie bereits die Standardtabelle Schriftart bekommen kann (was ich vermute, würde c.getFont()), dann benutzen Sie einfach deriveFont(Font.BOLD) auf sie.

Andere Tipps

Sie können auch die Tabellenzeile Rendering Ansatz betrachten , die Sie ein wenig mehr Flexibilität bei der Steuerung, welche Zellen Sie die Schriftart für ändern. Ich habe es für bolding den Text in allen Spalten der ausgewählten Zeile verwendet wird.

Einstellung Schriftart fett mit Caching, wie bereits hier beschrieben, ausgeführt werden.

Im Fall, dass Sie nur einen Teil des Textes in fett setzen - Verwendung HTML. Tabellenzelle Renderer basiert auf JLabel (oder Sie können eine Rückkehr). Konvertieren Sie Ihren Text kann HTML fast jedes Textattribut ändern.

Wir verwenden diese Technik ausführlich und sahen keinen signifikanten Leistungsabfall.

Hier ist der Ansatz der Faule: Verwenden Sie DefaultTableCellRenderer (die eine Unterklasse von JLabel ist) und verwenden HTML angeben, wenn Sie eine Fettschrift verwenden möchten

.

Es wird nicht so performant wie Ihre eigenen Renderer zu definieren und die Schriftarten direkt steuern, aber der Code ist in der Regel kompakt, so ist gut für einfache Anwendungen.

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

Sie können damit auch ..

        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;

    }

}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top