Hallo Albert,
scheint sich ja keiner so recht an Deine Frage zu trauen,
also probier ich mal mein Glück 
in Excel wird, wenn man einen Doppelklick auf den Zwischenraum
zw. zwei Spalten macht die Breite der Spalte auf die max.
benötigte Breite gesetzt.
Wie macht man dies in Java mit einer JTable ?
Ich denke, das Bestimmen der optimalen Spaltenbreite sollte kein
Problem für Dich sein. Du gehst einfach alle Zellen der Spalte
durch und merkst dir die breiteste. Dies ist dann deine neue
bevorzugte Spaltenbreite.
Code von der Stange gibt’s z.B. bei
http://jroller.com/page/santhosh?entry=action_to_fit…
Doppelklick auf den Header kann ich ja abfangen aber wie kann
man einen Doppelklick auf den Zwischenraum abfangen ? Gibt es
da auch einen Listener? Der Cursor ändert sich ja auch an
dieser Stelle.
Wie immer bei solchen Problemen, sollte man einfach
im Quellcode anschauen, wie das Swing selbst implementiert.
Das Stichwort ist hier das Umschalten des Cursors (setCursor)
über den Spaltenzwischenräumen im Tabellen-Header (JTableHeader).
Ein Blick in den JTableHeader zeigt, dass Swing dort nichts
mit dem Cursor anstellt, also bleibt nur noch die UI-Delegate-Klasse.
Und tatsächlich, in javax.swing.plaf.basic.BasicTableHeaderUI
wird man fündig:
private void swapCursor() {
Cursor tmp = header.getCursor();
header.setCursor(otherCursor);
otherCursor = tmp;
}
public void mouseMoved(MouseEvent e) {
if (canResize(getResizingColumn(e.getPoint())) !=
(header.getCursor() == resizeCursor)) {
swapCursor();
}
}
Der JTableHeader installiert über den UIDelegate
einen MouseMotion-Listener (siehe installListeners()), in
dessen mouseMoved-Methode der Cursor für zum Wartecursor
wird, wenn sich der Cursor in den letzten 3 Randpixeln des
momentanen Spaltenheaders befindet :
private TableColumn getResizingColumn(Point p, int column) {
...
Rectangle r = header.getHeaderRect(column);
r.grow(-3, 0);
if (r.contains(p)) {
return null;
}
...
}
Analog solltest Du also vorgehen.
Problem ist dabei, dass ich mit einem Klick auf den Header der
Spalte diese sortieren kann. Mach ich einen Doppelklick, so
wird sie trotzdem sortiert. If e.getClickCount () == 1 wird
immer auch bei einem Doppelklick durchlaufen !?
Nö, eigentlich nicht.
Gruß,
-Andreas.