Bei JLabelverkleinerung "" beeinflussen

Status
Nicht offen für weitere Antworten.

SaschaLR

Bekanntes Mitglied
Hallo Leute!

Ich habe einen Renderer für einen Tableheader geschrieben, der ein JLabel zurückliefert. Klappt auch alles gut...

Wenn ich die Breite der Spalten verkleinere wird beim Unterschreiten einer minimalen Größe der Text abgschnitten und ein "..." angehängt. Ist ein normales Verhalten mit dem ich auch gerechnet habe.

Es ergibt sich nur ein Problem: Wenn ich das Label (sprich die Column) weiter und weiter verkleinere wird irgendwann nur noch "..." angezeigt und rechts ich ein wenig, ganz wenig, Platz frei - von der Beschriftung ist garnichts mehr zu sehen.

Lässt sich das Verhlaten, ohne nennenswerten Aufwand, so abändern, dass ich anstelle von nur "..." die oder zumindest einen, Anfangsbuchstaben sehe? Das also die "..." abgeschnitten würden und ich garantiert noch Buchstaben sehe.

So in der Art ist es momentan:
Code:
|Absatz  |  <-- verkleinern
|Absat..|  <-- v.
|Abs...|  <-- v.
|A...|   <-- v.
|... |

Was ich gern hätte wäre sowas:
Code:
|Absatz  |  <-- verkleinern
|Absat..|  <-- v.
|Abs...|  <-- v.
|A...|   <-- v.
|A..|  <-- v.
|A.|  <-- v.


Ich denke das wird wohl nicht gehen ohne paintComponent() zu überschreiben - oder?

Dank und Gruß,
Sascha
 

Sky

Top Contributor
Dumme Frage: Warum definierst Du nicht eine Mindestbreite für die Spalte, so dass immer "A..." sichtbar bleiben kann !?
 

SaschaLR

Bekanntes Mitglied
Ne, so dumm ist die Frage nicht... aber in diesem Fall geht es so wirklich nicht.

Die Spaltenbreite ist vom User nicht zu ändern, nur vom Programm und das in Abhängigkeit von den Datensätzen die geladen werden. Andere Daten -> Andere Spaltenbreite aber fixiert. Da habe ich aber auch keinen Einfluss drauf. Zum Problem wird es erst dann, wenn ich dem Label bei Bedarf eine CompoundBorder gebe um rechts ein Stückchen frei zu halten und ein Icon zu zeichnen. Dann bleibt das Label gleich gross, aber der Platz den es hat um Text anzuzeigen wird kleiner. Das ist der Moment wo "die Breite des Labels" verändert wird.

Zu durcheinander? Hoffe nicht :)

Also leider geht es nicht sooo einfach ...
 

Sky

Top Contributor
Du könntest Dir die Spaltenbreite holen und mittels fontMetrics die Breite von dem anzuzeigendem String berechnen lassen und per setValue selbst A. usw setzen.
 

SaschaLR

Bekanntes Mitglied
Das stimmt wohl :)

Mir geht es ja nur darum, dass ich mich eben niht selbst um die Logik kümmern muss, sondern ob es eine Methode gibt nach dem Motto JLabel.setCutoffString(""); Ich will mir einfach nur ersparen eine schon vorhandene Funktionalität nochmal zu schreiben :)

Ein Lösung für das Problem an sich habe ich schon im Kopf und das würde auch gehen, nur müsste ich es noch coden und irgendjemand anderes müsste es später vielleicht verstehen usw ... wollte halt nur mal sehen ob jemand weiß, ob sich das Verhalten einfach beeinflussen läßt ... ob da was vorgesehen ist.

Also, andere Lösungsansätze gibts mehr als genug ... :)
 

Mag1c

Top Contributor
Hi Sascha,

ohne eigenen HeaderRenderer wirst du da wohl nicht weiterkommen. Das ist ziemlich fest verdrahtet:

BasicLabelUI.paint(..) ->
BasicLabelUI.layoutCL(...) ->
SwingUtilities.layoutCompoundLabel(...) ->
SwingUtilities.layoutCompoundLabelImpl(...)

und da steht dann irgendwo:

Code:
String clipString = "...";

Gruß
Mag1c
 

SaschaLR

Bekanntes Mitglied
Danke Mag1c!
Das ist die Stelle ,die ich gesucht hatte .. leider hardcodiert ... tja! Man kann eben nicht alels haben :)

Vielen Dank euch beiden!
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben