Swing Probleme mit JTable

  • Themenstarter Themenstarter Marco01_809
  • Beginndatum Beginndatum
M

Marco01_809

Gast
Hi,

habe einige Fragen bezüglich der JTable:

1.) Gibts eine einfache Möglichkeit jede 2. Zeile mit einem gräulichen Hintergrund zu versehen?

2.) JTable#getColumnModel().setColumnMargin(x) ist mir bekannt, aber dabei wird ja die komplette Zelle verkleinert, so dass auch beim Markieren mit der Maus nur die einzelnen Zelleninhalte den Selection-Foreground-Color abkriegen, sieht dann so aus:
attachment.php

Kann man den Text irgendwie anders, hübsch, auseinanderschieben? Habe auch nichts mit Bordern gefunden im CellRenderer/ColumnModel etc.

3.) Wie kann ich anweisen, Floats/Integer in den Zellen linksbündig zu halten? Benutze ein eigenes TableModel und den AutoRowSorter, irgendwer schiebt die Inhalte ja nach Rechts rüber, sobald TableModel#getColumnClass() einen (Gleitkomma-)zahltyp zurückgibt.

4.) Problem mit dem AutoRowSorter: Kann der Datumsangaben richtig sortieren? Oder muss ich über den Timestamp sortieren, und wie bekomme ich dann das lesbare Datum in die Zelle?

Vielen Dank, Marco.
 
1.) Gibts eine einfache Möglichkeit jede 2. Zeile mit einem gräulichen Hintergrund zu versehen?
Ja, z.B. die prepareRenderer der JTable überschreiben und darin abhängig vom Zeilenindex den Hintergrund setzen.
2.) JTable#getColumnModel().setColumnMargin(x) ist mir bekannt, aber dabei wird ja die komplette Zelle verkleinert, so dass auch beim Markieren mit der Maus nur die einzelnen Zelleninhalte den Selection-Foreground-Color abkriegen, sieht dann so aus:
attachment.php

Kann man den Text irgendwie anders, hübsch, auseinanderschieben? Habe auch nichts mit Bordern gefunden im CellRenderer/ColumnModel etc.
Mittels CellRenderer gibt es da sicherlich verschiedene Möglichkeiten, bin mir jetzt nicht sicher, ob man bei JLabel die Randabstände einstellen kann, ansonsten z.B. durch Verschachtelung von Komponenten, Verwendung einer speziellen Border (z.B. CompoundBorder)... quick & dirty könnte man einfach in der Anzeige durch den CellRenderer dem Wert ein paar Leerzeichen voranstellen.
3.) Wie kann ich anweisen, Floats/Integer in den Zellen linksbündig zu halten? Benutze ein eigenes TableModel und den AutoRowSorter, irgendwer schiebt die Inhalte ja nach Rechts rüber, sobald TableModel#getColumnClass() einen (Gleitkomma-)zahltyp zurückgibt.
Man könnte einfach String.class für diese Spalten zurückgeben, bin mir aber nicht sicher, wie sich das auf den RowSorter auswirkt, ansonsten ist die Lösung hier auch wieder ein CellRenderer.
4.) Problem mit dem AutoRowSorter: Kann der Datumsangaben richtig sortieren? Oder muss ich über den Timestamp sortieren, und wie bekomme ich dann das lesbare Datum in die Zelle?
Da ich maximal mit Java 1.5 programmiere konnte ich bisher nie RowSorter verwenden und kenne mich damit nicht aus. Ist denn im Model ein echtes Datum vom Typ Date o.ä? Dann würde ich erwarten, dass der RowSorter dieses sortieren kann. Die Darstellung muss dann über einen CellRenderer definiert werden.

Wie aus meinen Antworten ersichtlich wird, ist ausschließlich der/die CellRenderer für die Darstellung der Tabelleninhalte zuständig.
 
Danke,

1.) Gut, dass es keine Methode ala JTable#setEverySecondsRowColor(Color) gibt, hab ich mir fast gedacht 😀

2.) Wieso kam Sun/Oracle nicht darauf, das gleich sinnvoll zu implementieren? Ich mein, den muss doch aufgefallen sein, dass das so Schwachsinn ist...

3.) Das Funktioniert leider nicht, dann kommt "126" vor "1029".

4.) Das muss ich noch ausprobieren.

Korrigiert mich, aber bisher finde ich die Tabellenimplementation unter Swing sehr sehr schlecht gemacht, dazu noch total überkompliziert und am Ende hat man davon effektiv gesehen 0.

mfg, Marco.
 
zu 2) wollte damit nicht sagen, dass es da einfache Möglichkeiten gibt. Aber grundsätzlich kann jeder mittels CellRenderer die Darstellung der Zelle festlegen.
zu 3) war ja meine Vermutung, deswegen CellRenderer

Korrigiert mich, aber bisher finde ich die Tabellenimplementation unter Swing sehr sehr schlecht gemacht, dazu noch total überkompliziert und am Ende hat man davon effektiv gesehen 0.

In wie fern? JTable ist zwar recht komplex, aber das hat auch seinen Grund immerhin kann so ein Tabelle ja mehrer Millionen Werte beinhalten.
 
Korrigiert mich, aber bisher finde ich die Tabellenimplementation unter Swing sehr sehr schlecht gemacht, dazu noch total überkompliziert und am Ende hat man davon effektiv gesehen 0.

Das hatte ich übersehen, hätte aber was ähnliches gefragt. JTable ist die komplexeste und komplizierteste Klasse in Swing, und wer schonmal versucht hat, einen klickbaren Button in eine JTable zu packen, weiß, wie spaßig es ist, in den Innereien von CellEditoren rumwühlen zu dürfen... Die Methode "showMyHereogeneousDataInTheWayThatIwantAndLetItAutomaticallyHaveTheFeaturesThatINeedAndTheInteractionThatIPersonallyFindIntuitive()" gibt's eben leider noch nicht. Mit einer Standard-JTable und ein paar eigenen CellRenderern kann man schon SO enrom viel erreichen, dass man sich fragen muss, was man daran noch "besser" machen könnte.... Aber... polemisch: Schreib' dir doch deine eigene, bessere JTable 😛ueh: 😉
 
Das hatte ich übersehen, hätte aber was ähnliches gefragt. JTable ist die komplexeste und komplizierteste Klasse in Swing, und wer schonmal versucht hat, einen klickbaren Button in eine JTable zu packen, weiß, wie spaßig es ist, in den Innereien von CellEditoren rumwühlen zu dürfen... Die Methode "showMyHereogeneousDataInTheWayThatIwantAndLetItAutomaticallyHaveTheFeaturesThatINeedAndTheInteractionThatIPersonallyFindIntuitive()" gibt's eben leider noch nicht. Mit einer Standard-JTable und ein paar eigenen CellRenderern kann man schon SO enrom viel erreichen, dass man sich fragen muss, was man daran noch "besser" machen könnte.... Aber... polemisch: Schreib' dir doch deine eigene, bessere JTable 😛ueh: 😉

Ok, das war vielleicht ein vorschnelles Urteil, aber der Effekt von setMargin() ist atm wirklich etwas unnütz.
Ich werde mich mal in den CellRenderer einarbeiten und sehen ob ich der JTable doch was abgewinnen kann. Und eine eigene Table lass ich vorerst lieber sein 🙂
Ich schätze bis man sich mit allen Swing-Widgets auskennt, braucht ne längere Einarbeitungszeit, viele Möglichkeiten ziehen nun auch Komplexität mit sich.

Und vielen Dank an die Helfer 😉
 
Zum Glück gibt es für Swing SO gute Introductions und Tutorials, wie für keine(?) andere GUI-API: Einfach [c]how to Klassenname[/c], z.b. [c]how to JTable[/c] oder [c]how to JButton[/c] in google eintippen, und man landet bei sowas wie How to Use Tables (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components) - Anhand der direkt compilier- und auführbaren Beispiele dort kann man sich i.A. recht schnell in die relevanten Teile einarbeiten (man braucht das eben nicht alles zu wissen - wenn man's braucht, schaut man nach, wie's geht). Aber nochmal: JTable ist schon sehr komplex, weil sie eben auch enorm viele Mglichkeiten bietet...
 

Neue Themen


Zurück
Oben