Verschiedene Farben im Header von JTable

JTom

Grünschnabel
Wie kann ich Spaltenheader in Swing jeweils einzeln einfärben? Bisher hab ich es nur geschafft ALLE mit einer Fabe einzufärben.
Es wäre wirklich super, wenn mir hier jemand weiterhelfen könnte... ist wichtig!
 
Hallo,

ich hab hier mal die Lösung für einzelne Zellen innerhalb einer Spalte.
Je nach enthaltenen Wert der Zelle, wird diese unterschiedlich eingefärbt.

Den Renderer musst du halt einer entsprechenden Spalte über setCellRenderer(...) zuweisen.
Ziemlich ähnlich funktionierts mit den entsprechenden Renderern für Header.

Hier mal die Klasse für einen Renderer von Zellen, der diese unterschiedlich färbt:

Code:
	public class MyColoredDDayCellRenderer extends MyCellRenderer
	{
		MyColoredDDayCellRenderer(Font font,String sIcon)
		{
			super(font,sIcon);
			setHorizontalAlignment(SwingConstants.TRAILING);
		}
		
		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);
			
			if (column==table.getColumn("Tage bis").getModelIndex())
			{
				int iValue = new Integer(table.getValueAt(row,column).toString()).intValue();
				if ( iValue > 30)
				{
					c.setBackground(new Color(192,0,0));
				}
				else if (iValue <= 30 && iValue > 21)
				{
					c.setBackground(new Color(255,64,64));
				}
				else if (iValue <= 21 && iValue > 14)
				{
					c.setBackground(new Color(255,128,128));
				}
				else if (iValue <= 14 && iValue > 7)
				{
					c.setBackground(new Color(0,0,255));
				}
				else if (iValue <= 7 && iValue > 3)
				{
					c.setBackground(new Color(64,64,255));
				}
				else if (iValue <= 3 && iValue > 0)
				{
					c.setBackground(new Color(0,128,0));
				}
				else if (iValue <= 0)
				{
					c.setBackground(new Color(0,255,0));
				}
				else
				{
					c.setBackground(Color.WHITE);
				}
				
				c.setForeground(Color.WHITE);
			}
			
			
			return c;
		}
	}

Wenn dier das nicht wirklich weiter hilft, dann schau mal unter
http://www.developer.com/java/other/article.php/905671

Gruß,
Crai
 
Zuletzt bearbeitet:
Code:
contentTableModel = new DefaultTableModel();
      contentTableModel.setDataVector(content, identifier);
      contentTable = new JTable(contentTableModel) {
         protected JTableHeader createDefaultTableHeader()
         {
            return new GroupableTableHeader(columnModel);
         }
      };

ich hab meine contentTable, in der schon mein Model mitsamt allen Werten liegt.
Anfangs dacht ich, ich könnte über die Tablle -> Table Header -> Index ->.. den Background setzen.
Muss ich wirklich jede Spalte einzeln rendern lassen und sie dann nachträglich dazu stecken?
 
Zurück