2009-05-13 4 views
3

Angenommen, Sie haben eine JTable und für jede Zelle möchten Sie drei Strings mit unterschiedlicher Farbe anzeigen, sagen Wert1 (rot), Wert2 (blau), Wert3 (grün) .Mehrere Strings auf unterschiedliche Weise in die gleiche Zelle einer JTable eingefärbt

Ich überschrieb die getTableCellRendererComponentDefaultTableCellRenderer aber setForeground(Color) Methode gibt eine eindeutige Farbe für die gesamte Zeichenfolge in der Zelle angezeigt.

@Override 
public Component getTableCellRendererComponent(JTable table, Object value, 
     boolean isSelected, boolean hasFocus, int row, int column) { 
    String s = table.getModel().getValueAt(row,column).toString(); 

    StringTokenizer st = new StringTokenizer(s," "); 
    int nToken=st.countTokens(); 

    value1=st.nextToken(); 
    value2=st.nextToken(); 
    value3=st.nextToken(); 
    // so now all the values are blue... 
    setForeground(Color.blue); 

    return super.getTableCellRendererComponent(table, value, isSelected, 
      hasFocus, row, column); 

} 

Antwort

2

Der Standard-Renderer für eine Zellentabelle ist ein JLabel. Diese Komponente unterstützt HTML-Tags. Die einfachste Lösung, die Sie haben können, besteht darin, HTML zu verwenden, um die Zeichenfolgen mit verschiedenen Farben darzustellen. So können Sie einen String bauen wie:

<html><font color="blue">A String</font><font color="red">Another String</font></html> 

und legen Sie es auf die Zelle, und Sie müssen sich keine Gedanken über den Renderer kümmern.

Most swing components allow you to use HTML, this is not only limited to tables.

Eine andere Möglichkeit ist, dass Sie eine Klasse erstellen, die von JComponent erstreckt und Programm paintcomponent(), so zieht diese drei Saiten in verschiedenen Farben. Dann können Sie diese Komponente als Renderer festlegen. Aber das ist viel komplizierter. Da der Renderer wie ein "Stempel" funktioniert, stempelt er beim Zeichnen der Zellen die richtigen Farben. Dies ist nützlich, wenn Sie beispielsweise extrem komplexe und benutzerdefinierte Grafiken in einer Zelle zeichnen möchten.

Ich würde bei der Verwendung von HTML bleiben, wenn Sie keine riesige Anzahl von Zellen haben.

+1

HTML-Komponenten in Tabellen wird sehr schnell sehr langsam. Sie können die Komponenten zwischenspeichern, aber das wird nicht nur in speziellen Fällen schwierig. –

+0

Die Alternative, Ihre eigene JComponent zu schreiben, ist schnell. Aber schwierig, es richtig zu machen –

3

JIDE bietet ein StyledLabel als Teil ihrer Open-Source-Common-Layer, die genau das ist, was Sie wollen und 10x einfacher als die Implementierung von etwas auf eigene Faust.

https://jide-oss.dev.java.net/

alt text

Verwandte Themen