Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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.

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

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.

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.

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

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.

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

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

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

Ich auch weil ich keine Ahnung hab wie ich das angehen soll und ob das mit der JTable überhaupt geht :D

MfG

Saban

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.