Zum Inhalt springen

Optimale Spaltenbreite JTable


Empfohlene Beiträge

Geschrieben

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

Geschrieben

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.

Geschrieben

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

Geschrieben

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.

Geschrieben

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.

Geschrieben

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

Geschrieben

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.

Geschrieben

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

Geschrieben

Das würde freilich funktionieren.

Ich würde das als "ungewöhnlichen" Zeilenumbruch bezeichnen :D

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 :)

Geschrieben

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 :D Tut mir leid war wirklich schwammig erklärt!

MfG

Saban

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...