Rand einzelner Zellen anpassen

Hallo mal wieder,
ich habe mal wieder eine kurze Frage:

Ich habe eine JTable, in der ich die Einträge in der ersten Reihe gerne hervorheben möchte. Das ganze will ich durch einen dicken Rand der Zellen in der ersten Reihe erreichen.

Weiß jemand wo ich ansetzen muss um das zu erreichen?

Grüße,
AceOfSpades

Was meinst Du mit “erste Reihe”? Die erste Zeile oder die erste Spalte?

Der Schlüssel zur Lösung dürfte ein (Default)TableCellRenderer sein.
Wenn die erste Spalte gemeint ist wäre das sehr simpel.
Wenn Die erste Zeile gemeint ist musst Du 2 Zeilen mehr in die Logik investieren…

bye
TT

Entschuldigung, gemeint ist die erste Zeile.

Den TableCellRenderer hatte ich auch im Kopf, allerdings hab ich in der Methodenvielfalt irgendwie nicht das gefunden was ich wollte. Ich habe aber noch einen Artikel gefunden:
http://stackoverflow.com/questions/1772764/how-do-you-add-a-border-to-a-row-in-a-jtable

Benötige ich also BorderFactory um meinen Rahmen zu zeichnen? Wenn ja müsste es ja genau so klappen, nur dass ich nicht abfragen muss welche Zeile selektiert ist.

*** Edit ***

Es funktioniert, einen eigenen TableCellRenderer habe ich aber (zum Glück) doch nicht gebraucht. Im Link oben die erste Antwort verrät eigentlich schon die Lösung, ein bischen abändern zu

public Component prepareRenderer(
			TableCellRenderer renderer, int row, int column)
		{
			Component c = super.prepareRenderer(renderer, row, column);
			JComponent jc = (JComponent)c;

			//  Color row based on a cell value
			//  Alternate row color

			if (row == 0){
			jc.setBorder(new MatteBorder(2, 0, 2, 0, Color.BLACK) );
							}


			//  Use bold font on selected row

			return c;
		}

und das gewünschte Ergebnis stellt sich ein :slight_smile:

[quote=TheAceOfSpades]einen eigenen TableCellRenderer habe ich aber (zum Glück) doch nicht gebraucht.[/quote]Naja, dafür hast Du JTable erweitert. Der eigene TableCellRenderer hätte genau so einfach ausgesehen:TableCellRenderer cellRenderer = new DefaultTableCellRenderer() { private final Border MATTE_BORDER = BorderFactory.createMatteBorder(2, 0,2, 0, Color.BLACK); @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { JComponent component = (JComponent) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); if (0 == row) component.setBorder(MATTE_BORDER); return component; } }; new JTable().setDefaultRenderer(Object.class, cellRenderer);

bye
TT

Die JTable musste ich sowieso erweitern, die ist nämlich was ganz besonderes :stuck_out_tongue:
´
Es würde also mehr arbeit machen noch nen eigenen Renderer zu verwenden :wink: