Best-Practise: JTable Text in Zelle zu groß

fredi

Mitglied
Hallo zusammen,

vielleicht könnt ihr mir zu folgenden Thema helfen.

Ich habe eine JTable mit einem ScrollPane. Die Höhe als auch für die Breite der Zellen berechne ich dynamisch. Trotzdem kommt es vor, dass in einer Zelle zu viel Text steht und dieser nicht komplett dargestellt wird.

Gibt es eine Möglichkeit dem Anwender einen Hinweis zu geben? e.g. "Text nicht vollständig siehe Details" oder eine Scroll Bar für eine einzelne Zelle?

Über einen Hinweis wäre ich sehr dankbar 🙂

Viele Grüße und danke im Voraus
 
Du musst auf jeden Fall den CellRenderer überschreiben.
Dieser erzeugt standardmäßig ein JLabel (Achtung, das wird recycled, es gibt nur EIN Label für ALLE Zellen, sonst ginge der Resourcenverbrauch massiv in die Höhe) mit dem Text.
Du könntest hier z.B. ein Borderlayout-Panel erzeugen, mit dem Label in der Mitte und einem Icon rechts.
Z.B. Resize-Event, der ausgelöst werden sollte, wenn das Panel in die Tabelle eingepasst wird, wird anhand Font und tatsächlicher Textgröße am Bildschirm dann entschieden, ob das Icon angezeigt werden soll oder nicht.

Auf ein Scrollpanel würd ich verzichten, da die Zellen in der Tabelle nur gezeichnet werden aber nicht "funktionieren", bis du sie editierst (klar gibt's da ein paar komplizierte Tricks, aber so ist das Standardverhalten).

Wenn du mit einem Scollpanel editieren willst, verwende es stattdessen für den Editor.

Du KANNST (aber ich empfehle dringend, es nicht zu tun) deinen Cell-Renderer und/oder deinen Editor auch so schreiben, dass für jede Zelle ein eigenes Label verwendet wird, du kannst sogar bei jedem Zeichenvorgang ein neues erstellen. Versuch aber, zumindest pro Spalte mit einer einzelnen Komponente, die immer wieder verwendet wird, alles abzudecken.


Edit: Bevor du anfängst, dich mit Renderern und Editoren rumzuärgern, kannst du einen Prototyp auch einfach in ein größenveränderbares Fenster packen und so lang rummurksen, bis die die Darstellung passt.
 
Zuletzt bearbeitet:
Du musst auf jeden Fall den CellRenderer überschreiben.
Dieser erzeugt standardmäßig ein JLabel (Achtung, das wird recycled, es gibt nur EIN Label für ALLE Zellen, sonst ginge der Resourcenverbrauch massiv in die Höhe) mit dem Text.
Du könntest hier z.B. ein Borderlayout-Panel erzeugen, mit dem Label in der Mitte und einem Icon rechts.
Z.B. Resize-Event, der ausgelöst werden sollte, wenn das Panel in die Tabelle eingepasst wird, wird anhand Font und tatsächlicher Textgröße am Bildschirm dann entschieden, ob das Icon angezeigt werden soll oder nicht.

Auf ein Scrollpanel würd ich verzichten, da die Zellen in der Tabelle nur gezeichnet werden aber nicht "funktionieren", bis du sie editierst (klar gibt's da ein paar komplizierte Tricks, aber so ist das Standardverhalten).

Wenn du mit einem Scollpanel editieren willst, verwende es stattdessen für den Editor.

Du KANNST (aber ich empfehle dringend, es nicht zu tun) deinen Cell-Renderer und/oder deinen Editor auch so schreiben, dass für jede Zelle ein eigenes Label verwendet wird, du kannst sogar bei jedem Zeichenvorgang ein neues erstellen. Versuch aber, zumindest pro Spalte mit einer einzelnen Komponente, die immer wieder verwendet wird, alles abzudecken.


Edit: Bevor du anfängst, dich mit Renderern und Editoren rumzuärgern, kannst du einen Prototyp auch einfach in ein größenveränderbares Fenster packen und so lang rummurksen, bis die die Darstellung passt.
super danke dir
 

Zurück
Oben