Robert: JTable, TableHeader Tooltips

Beitrag lesen

Hallöle,

Gute Frage. Der obenstehende Code funktioniert bei mir. Es wird nie
"Click to sort! (ToolTip aus new JTableHeader)", sondern immer nur
der Spaltenname ausgegeben.

Den bekomme ich ja auch nicht - sondern den, den ich direkt per getTableHeader().setToolTipText() angebe ...
Den obigen bekomme ich nur, wenn ich die Funktion "manuell" aufrufe, also nicht durch den Mauszeiger auslöse.

Bist du sicher, daß du (oder irgend eine Swing-Klasse) den TableHeader
nicht nochmal überschreibt, nachdem du deine eigene TableHeader-
Implementierung zugewiesen hast?

Eigentlich schon.
Es gibt nur eine weitere Stelle, an der auf den TableHeader zugegriffen wird - direkt vor obigem Code wird ausgeführt:

mTable.getTableHeader().addMouseListener(
    new MouseAdapter()
            {
                    public void mouseClicked(MouseEvent event)
                    {
                        int displayedIx = mTable.getColumnModel().getColumnIndexAtX(event.getX());
                        int col = mTable.getColumnModel().getColumn( displayedIx ).getModelIndex();
                        columnHeaderClicked(col);
                    }
                }
            );

Das seltsame daran ist: die Mausklicks auf den Header funktionieren (columnHeaderClicked wird aufgerufen).

Eigentlich dürfte das ja gar nicht der Fall sein, da ich ja unmittelbar nach dem Setzen des Mauslisteners den TableHeader, für den er gesetzt ist, durch einen ganz anderen ersetze ...

Ich hatte das mit dem Mauslistener auch schon nach dem Setzen des TableHeader stehen, dann klappte das allerdings auch nicht mehr.

Alles sehr seltsam.
Ich hab jetzt mal
System.out.println("TableHeader: " + mTable.getTableHeader());

vor dem Setzen, nach dem Setzen und in columnHeaderClicked ausgegeben:

TableHeader: javax.swing.table.JTableHeader[,0,0,450x20,invalid,alignmentX=null,alignmentY=null,border=,flags=8,maximumSize=,minimumSize=,preferredSize=,draggedDistance=0,reorderingAllowed=true,resizingAllowed=true,updateTableInRealTime=true]

TableHeader: test.robert.LogTableModel$2[,0,0,0x0,invalid,alignmentX=null,alignmentY=null,border=,flags=8,maximumSize=,minimumSize=,preferredSize=,draggedDistance=0,reorderingAllowed=true,resizingAllowed=true,updateTableInRealTime=true]

TableHeader: test.robert.LogTableModel$2[,0,0,0x0,invalid,alignmentX=null,alignmentY=null,border=,flags=8,maximumSize=,minimumSize=,preferredSize=,draggedDistance=0,reorderingAllowed=true,resizingAllowed=true,updateTableInRealTime=true]

Der richtige Header ist also definitiv vorhanden.

Aber es kommt der falsche Tooltip.

Es hilft auch nicht, statt der anonymen Ableitung eine lokale Klasse zu benutzen, oder die Size des Headers zu setzen (der einzige Unterschied neben dem Klassennamen bei der Ausgabe des TableHeaders ...)

Das ist echt seltsam.

Hm - kann es an der JDK-Version liegen?
Übersetzt wird mit 1.4.2 (im NetBeans), laufen lassen hab ich es unter 1.4.2 und 1.4.2_05 (andere hab ich nicht hier)

cu,
Robert