# JTable: Spaltenbreite automatisch anpassen



## RungetSvohu (23. Sep 2011)

Die Überschrift sagt es bereits. Kann man in einer JTable dafür sorgen, dass alle Spalten genau so breit sind, dass der Inhalt gerade noch lesbar ist (also das, was Excel macht, wenn man zwischen zwei Spalten doppelklickt)?


----------



## bERt0r (24. Sep 2011)

Du holst dir die Schriftart des Tables, läufst alle Columns durch und errechnest mithilfe von FontMetrics die Breite des Strings. Die weist du dann der Column zu.
So sollte das funktionieren:

```
Font font=UIManager.getDefaults().getFont("Table.font");
		Enumeration<TableColumn> columns=table.getColumnModel().getColumns();
		FontMetrics fontMetrics=table.getFontMetrics(font);
		while(columns.hasMoreElements())
		{
			TableColumn c=columns.nextElement();
			String title=c.getHeaderValue().toString();
			Rectangle2D r=fontMetrics.getStringBounds(title, table.getGraphics());
			c.setPreferredWidth((int)r.getWidth()+10);
		}
```
edit: Man muss noch ungefähr 10 dazuzählen wegen dem Border von manchen Look and Feels


----------



## RungetSvohu (24. Sep 2011)

Vielen Dank. Du checkst aber nur die Überschrift der Spalte, oder? Ich müsste dann wohl noch zusätzlich alle Einträge durchgehen und die maximale Breite wählen, aber das ist ja kein Problem.


----------



## André Uhres (25. Sep 2011)

RungetSvohu hat gesagt.:


> Kann man in einer JTable dafür sorgen, dass alle Spalten genau so breit sind, dass der Inhalt gerade noch lesbar ist [...] ?



Hallo RungetSvohu,

dafür gibt es bereits fertige Klassen, zum Beispiel AutofitTableColumns oder Table Column Adjuster.

Gruß,
André


----------

