JTable

Hallo!

ich habe ein Problem mit einer JTable.
Ich möchte das die Spalten immer mindestens so breit sind wie der breitestes Spalteneintrag, wenn mehr Platz ist die Spalten an die Fenstergrösse angepasst werden, wenn der Platz zu klein ist ein Scrollbalken eingeblendet wird.
Ich bekomme es hin das die Spalten immer mindestens so breit sind und sich an die Fenstergrösse anpassen; sobald ich die Tabelle allerdings in ein ScrollPane lege ist die Spaltenbreite viel zu breit. Auch die Idee die Tabelle in ein extra Pane und das dann wiederrum in ein ScrollPane zu legen hat nichts gebracht. Kann mir jemand einen Tip geben wie ich das Problem lösen kann?

Lieben Gruß,
Monchichi

public void packColumn(JTable table, int vColIndex, int margin) {
TableModel model = table.getModel();
DefaultTableColumnModel colModel = (DefaultTableColumnModel)table.getColumnModel();
TableColumn col = colModel.getColumn(vColIndex);
int width = 0;

// Get width of column header
TableCellRenderer renderer = col.getHeaderRenderer();
if (renderer == null) {
renderer = table.getTableHeader().getDefaultRenderer();
}
Component comp = renderer.getTableCellRendererComponent(
table, col.getHeaderValue(), false, false, 0, 0);
width = comp.getPreferredSize().width;

// Get maximum width of column data
for (int r=0; r[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo!

vielen Dank für die Hilfe, aber mein Problem ist noch immer das gleiche. Sobald ich meine Tabelle in ein Scrollpane lege sind die Spalten nicht mehr so breit wie Sie mindestens sein müssen sondern sie sind viel breiter. Dies wird leider sehr unübersichtlich, weswegen ich weiterhin nach einer anderen Lösung suche. Falls noch jemand eine Idee hat bin ich sehr froh darüber…

Lieben Gruß,
Monchichi

Hallo,

dann hast Du die automatische Spaltenbreite an (Standard)

Wenn Du eine JTable erzeugst, so hat sie erst mal alle Spalten über die verfügbare Fläche verteilt. Es gibt eine Methode, um dieses Verhalten anzupassen:

tab.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

sollte helfen.

Gruß

Peter

Hallo!

jup, jetzt klappt es, vielen vielen Dank! Das einzigste was noch nicht so ist wie ich möchte ist, dass wenn mehr Platz ist die Spalten auch breiter werden. Ich gehe davon aus das es daran liegt, das die PreferredWidth gesetzt wird. Gibt es hier auch noch eine Möglichkeit das zu Ändern?

Viele Grüsse,
Monchichi

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

na, dazu müsstest du halt die packColumns entsprechend modifizieren.
Zuerst den freien Raum ermitteln, dann die packColumns laufen lassen und danach den zweiten Parameter anpassen (Den Abstand von Text zu Spaltenende) oder einfach die letzte Spalte so groß machen, dass der Platz aufgebraucht wird.

Gruß

Peter