Saban Geschrieben 2. März 2009 Geschrieben 2. März 2009 Guten Morgen! Ich habe eine JTable in der ich die optimale Spaltenbreite (also nur so breit das der längste Datensatz ohne Probleme gelesen werden kann) ermitteln lassen will, leider haben ich noch keine Ahnung wie ich das angehen soll bzw umsetzen könnte. Bin für jeden Tip dankbar! MfG Saban Zitieren
VaNaTiC Geschrieben 2. März 2009 Geschrieben 2. März 2009 Also ich hab vor paar Jahren ziemlich heftig nach einer optimalen Lösung dazu gesucht und rumprogrammiert. Bin aber zu keinem wirklich befriedigendem Ergebnis gekommen, außer das eine fixe Angabe die wirklich einzig wahre ist. Leider kam das für mich nicht in Frage, da ich einen CSV-DB-Editor programmieren wollte, bzw. eine allgemeingültige JTable ausm SWING-Toolkit, die als Basis für eigene Zwecke dient. Ich kann nur soviel sagen, dass Du ein eigenes TableColumnModel brauchst und Deine eigene JTable sollte die Verbindung zum eigenen TableModel und TableColumnModel herstellen. Anhand der Daten im TableModel kannst mittels des gesetzten Font's der Spalte errechnen, wieviel Pixel der maximale, der minimale und der prefered Breite ist. Aber mach Dich darauf gefasst, dass das nicht lustig wird, denn ich denke, dass gerade das Feuern der diversen Ereignisse zum Feststellen, der Größen-, Spalten- und Zellenänderung nicht wirklich mit dem Container zum beispiel ScollPane zusammenpasst! Viel Erfolg. Zitieren
Saban Geschrieben 2. März 2009 Autor Geschrieben 2. März 2009 Hi VaNaTiC! Danke für deine schnelle Antwort! Ich hab auch schon gegoogled und da gemerkt das es kein schönes Thema ist aber ich hab gehofft das mir hier wenigstens jemand was aufmunterndes sagen würde... Na dann heißt es weiter probieren / suchen und hoffen das sich vllt doch noch jemand meldet... MfG Saban Zitieren
speedi Geschrieben 2. März 2009 Geschrieben 2. März 2009 Das Problem dürfte hier wohl seit die korrekte Länge des Strings zu ermitteln. Wenn man nicht grade mit Maschinenschriftarten wie Courier arbeitet ist das jedoch nicht so einfach raus zu finden. Zitieren
Dragon8 Geschrieben 2. März 2009 Geschrieben 2. März 2009 Ehrlich gesagt, ist das eher das einfachste von allem. Für diesen Zweck gibt es Java nämlich schon eine vorgefertigte Klasse die einem zu einem bestimmten Font die Länge eines bestimmten Strings berechnet. FontMetrics (Java Platform SE 6) Dieses Objekt kann man sich von jeder Component erzeugen lassen. Zitieren
VaNaTiC Geschrieben 2. März 2009 Geschrieben 2. März 2009 Korrekt, das Ausrechnen der tatsächlichen Pixel eines Textes in einer Zelle macht man zum Glück nur einmal und zwar genau dann, wenn der Text in das TableModel gesetzt wird. setValueAt() war das glaube ich. Das lässt sich dann prima mit dem Maximum ausm TableColumnModel vergleichen und ggf setzen und JTable updaten per fireXXX(). Fakt ist, dass ich leider noch keine JTable in einem Container wie JScrollPane oder so gesehen habe, die das beim Resizen trotzdem noch ordentlich gemacht hat. Machbar ist das sehr wohl, aber man muss mit ganz kleinen Einschränkungen rechnen und leben. Zitieren
Saban Geschrieben 3. März 2009 Autor Geschrieben 3. März 2009 Hallo Zusammen! ich hab mir den Link mit den FontMetrics mal angeschaut aber ich komm da nicht wirklich weit :confused: könnte mir jemand vllt irgendwelche Codestücke zu Posten das ich mir nen Leitfaden draus ziehen kann MfG Saban Zitieren
VaNaTiC Geschrieben 3. März 2009 Geschrieben 3. März 2009 hmm, mittels FontMetrics "errechnet" man anhand des Fonts und des Strings die tatsächlichen Pixel auf einer Zeichenfläche eines Textes. Was verstehst Du da nicht? Die API-Hilfen sind doch selbsterklärend? Wenn FontMetrics schon ein Problem darstellt, dann lass das automatisierte Setzen der Spaltenbreite einer JTable nochmal sein. Du verrennst Dich sonst. Zitieren
Saban Geschrieben 4. März 2009 Autor Geschrieben 4. März 2009 Hmm... eine andere Lösung wäre das ich sage ich gib die Spaltenbreite statisch an Aber dazu müsste ich wissen ob mal einzelne Zeilen vergrößern kann also wenn String.length() > 20 dann soll SubString 1 in der ersten Zeile liegen und SubString 2 in der Zeile Ich hoffe ich konnte mich klar genug ausdrücken MfG Saban Zitieren
VaNaTiC Geschrieben 4. März 2009 Geschrieben 4. März 2009 Das würde freilich funktionieren. Ich würde das als "ungewöhnlichen" Zeilenumbruch bezeichnen Aber nichtsdestotrotz hast Du jetzt etwas Arbeit im TableModel, denn Du musst jetzt automatisiert in der Zeile x+1 einen SubString setzen, wenn in Zeile x ein Wert reingeschrieben wird, der länger als Dein MaxWert ist. Ich geb Dir einen Tipp: das stinkt nach einer Rekursion, wenn Du nicht aufpasst Zitieren
Saban Geschrieben 5. März 2009 Autor Geschrieben 5. März 2009 Hi! ich glaub das war doch ein wenig undeutlich :upps also ich habe eine Zeile und in die 1 Spalte ist so breit das ich maximal 100 Zeichen anzeigen könnte. Nun bekomme ich aber einen String mit 180 Zeichen nun möchte ich die Höhe der Zeile sozusagen verdoppeln das der String in der Zeile ohne Probleme angezeigt werden kann. Das Zeile x + 1 hört sich für mir mehr danach an die Zeile drunter zu befüllen Tut mir leid war wirklich schwammig erklärt! MfG Saban Zitieren
VaNaTiC Geschrieben 5. März 2009 Geschrieben 5. März 2009 OK, stimmt. Das hab ich dann falsch verstanden. Bin gespannt, wie das Ergebnis wird. Zitieren
Saban Geschrieben 5. März 2009 Autor Geschrieben 5. März 2009 Ich auch weil ich keine Ahnung hab wie ich das angehen soll und ob das mit der JTable überhaupt geht MfG Saban Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.