Hallo zusammen.
Ich habe eine JTable und möchte gern die Funktionalität implementieren, dass sich die Spalten automatisch auf die optimale Breite anpassen, wenn man an den Rand des Spaltenkopfes doppelklickt. Ein ähnliches Verhalten kennt man z.B. aus MS Excel oder auch aus Eclipse (und vielen andren GUIs).
Diese automatische Anpassung soll nur erfolgen, wenn man den Resizing-Cursor hat (also am rechten Rand der Spalte).
Ich habe bisher herumprobiert, bin aber auf noch keine zufriedenstellende Lösung gekommen:
Mittels eines MouseListeners am JTableHeader reagiere ich derzeit auf den Doppelklick. Problem ist aber, dass dieser Doppelklick überall wirkt. Ich möchte es aber nur am (rechten) Rand der Spalte haben.
Was mir bisher nur einfällt ist via Mausposition etc. prüfen, ob sich der Cursor in der Nähe des Spaltenendes befindet... aber ich habe das dumpfe Gefühl, dass es auch viel einfacher geht, da es ja fast so etwas wie Standardfunktionalität ist.
Hier ein bisschen Code:
Also meine Frage: Kennt jemand hierfür einen direkteren / einfacheren Weg?
Ich habe eine JTable und möchte gern die Funktionalität implementieren, dass sich die Spalten automatisch auf die optimale Breite anpassen, wenn man an den Rand des Spaltenkopfes doppelklickt. Ein ähnliches Verhalten kennt man z.B. aus MS Excel oder auch aus Eclipse (und vielen andren GUIs).
Diese automatische Anpassung soll nur erfolgen, wenn man den Resizing-Cursor hat (also am rechten Rand der Spalte).
Ich habe bisher herumprobiert, bin aber auf noch keine zufriedenstellende Lösung gekommen:
Mittels eines MouseListeners am JTableHeader reagiere ich derzeit auf den Doppelklick. Problem ist aber, dass dieser Doppelklick überall wirkt. Ich möchte es aber nur am (rechten) Rand der Spalte haben.
Was mir bisher nur einfällt ist via Mausposition etc. prüfen, ob sich der Cursor in der Nähe des Spaltenendes befindet... aber ich habe das dumpfe Gefühl, dass es auch viel einfacher geht, da es ja fast so etwas wie Standardfunktionalität ist.
Hier ein bisschen Code:
Java:
...
table.getTableHeader().addMouseListener(new ResizeListener(table));
...
@Override
public void mouseClicked(MouseEvent event)
{
if ( SwingUtilities.isLeftMouseButton(event) && event.getClickCount() == 2 )
{
int col = table.columnAtPoint(event.getPoint());
// hier Abfrage, ob der Cursor am Spaltenrand ist...
table.resizeColumnToContents(col); // diese Methode habe ich schon und sie geht
}
}
Also meine Frage: Kennt jemand hierfür einen direkteren / einfacheren Weg?