Hallo,
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 ...
Ja. Jedenfalls wird bei meinem Mini-Beispielprogramm, das ich mir
auf Basis deines Codes gemacht habe, immer die aktuelle Spaltennummer
im Tooltip ausgegeben.
Den Code meines Programms habe ich unten angehängt.
Den obigen bekomme ich nur, wenn ich die Funktion "manuell" aufrufe, also nicht durch den Mauszeiger auslöse.
OK.
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 ...
Ja, dürfte eigentlich nicht :)
Ich hatte das mit dem Mauslistener auch schon nach dem Setzen des TableHeader stehen, dann klappte das allerdings auch nicht mehr.
Was dann wiederum falsch ist, weil genau das nämlich klappen sollte.
Alles sehr seltsam.
Stimmt :)
Ich hab jetzt mal
System.out.println("TableHeader: " + mTable.getTableHeader());
vor dem Setzen, nach dem Setzen und in columnHeaderClicked ausgegeben:
[Offensichtlich korrekte Ausgaben gesnippt]
Der richtige Header ist also definitiv vorhanden.
Aber es kommt der falsche Tooltip.
Komisch, das...
Hm - kann es an der JDK-Version liegen?
Wäre einen Gedanken wert. Ist aber nicht sehr wahrscheinlich...
Ü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)
Meiner einer übersetzt mit Eclipse und führt mit 1.4.2_06 aus.
Du solltest übrigens dringend auf 1.4.2_06 updaten, da im 1.4.2_05
ein Sicherheitsloch entdeckt wurde, das dein System beim Surfen
gefährdet.
So richtig viel kann ich dir bei deinem Problem nicht helfen. Dein
Vorgehen scheint korrekt. Mein vergleichbarer Test funktioniert. Deine
Testausgaben scheinen auch das korrekte Ergebnis zu liefern.
Ich vermute, daß du irgendwo in deinem Code noch einen Fehler hast.
Vielleicht weist du den neuen TableHeader irgendwo an eine falsche
Tabelle zu oder so.
Führe einfach mal mein Testprogramm aus. Wenn das funktioniert,
liegt's wohl an deinem Code.
Vielleicht kannst du ja ein bißchen mehr Code posten, wenn du den
Fehler nicht finden solltest.
Gruß
Slyh
Mein (häßlicher) Beispielcode:
public class TableTooltipTest extends JFrame
{
public TableTooltipTest()
{
super("Test");
}
public static void main(String[] args)
{
TableTooltipTest t = new TableTooltipTest();
t.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
t.setSize(600, 600);
Toolkit.getDefaultToolkit().setDynamicLayout(true);
Container content = t.getContentPane();
JTable table = new JTable(new Object[][] {{"0, 0", "1, 0"}, {"0, 1", "1, 1"}}, new Object[] {"eins", "zwei"});
JScrollPane scroller = new JScrollPane(table);
content.add(scroller);
table.setToolTipText("testtext");
table.getTableHeader().setToolTipText("tableheadertext");
table.setTableHeader(
new JTableHeader(table.getColumnModel()) //anonyme Ableitung von JTableHeader
{
public String getToolTipText()
{
return "Click to sort! (ToolTip aus new JTableHeader)";
}
public String getToolTipText(MouseEvent e)
{
System.out.println("getToolTipText(" + e + ")");
int ix = table.getColumnModel().getColumnIndexAtX(e.getPoint().x);
int modelIx = table.getColumnModel().getColumn(ix).getModelIndex();
return "" + modelIx;
}
}
);
t.show();
}
}