HTML-tags für JLabel

kodela

Bekanntes Mitglied
Hallo,

den Text für ein JLabel-Feld gebe ich wie folgt aus:

Java:
        labelHinweise.setText(
                "<html>"
                + "<br><br><h3>&nbsp;Blablabla - Blablabla!</h3><br>"
                + "<table>"
                + "<tr><td><b>Blablablat_kurz:</td><td>" + zet + "</td></tr>"
                + "<tr><td><b>Blablabla_länger:</td><td>" + efe + "</td></tr>"
                + "<tr><td><b>Blablabla_sehr lang:</td><td>" + tps + "</td></tr>"
                + "<tr><td><b>Blablabla:</td><td>" + kli + "</td></tr>"
                + "<tr><td><b>Blablabla_lang:</td><td>" + not + "</td></tr>"
                + "<tr><td><b>Blablabla_mini:</td><td>" + flt + "</td></tr>"
                + "</table></html>");
    }

Damit wird nach einer Überschrift eine Tabelle mit zwei Spalten ausgegeben, in jeder Zeile erst die Beschreibung, die mit einem Doppelpunkt endet und dann in der zweiten Spalte das jeweilige Ergebnis. Also für die erste Zeile der Tabelle die Beschreibung "Blablablat_kurz:" und in 'zet' der String mit dem zugehörigen Ergebnis. Das funktioniert alles einwandfrei.

Die Breite der ersten Spalte wird an die Länge der längsten Beschreibung angepasst, hier also an "Blablabla_sehr lang:". Das hätte ich nun gerne geändert. Der Abstand zwischen Beschreibung und Ergebnis beträgt in dieser Zeile genau eine Leerstelle und das sollte mehr werden. Leerstellen, welche ich der Beschreibung hinzufüge, werden ignoriert. Genauso ignoriert wird eine explizite Breitenangabe mit width, also zum Beispiel mit
"<tr><td width=35><b>Blablablat_kurz:</td><td>" + zet + "</td></tr>"
wobei ich für diese Tag-Erweiterung auch width='35' und width=\"35\" versucht habe.

Gibt es eine Möglichkeit, Java dazu zu bewegen, die Breite eines Feldes festzugelegen?

Danke vorweg,

kodela
 
Eine Möglichkeit wäre Leerzeichen zu escapen mittels &nsbp;
Ich weiß nicht wie gut die CSS Funktionalität ist, eigentlich müsste man das über style="width:35em" machen (Einheiten sollte man bei width auch immer angeben)

Aber ich würde auch mal die Gretchenfrage stellen - für mich ist das eine Vergewaltigung eines Labels und ich würde sowas eher entweder mit einer JTable oder einem Grid-Artigen Layout (GridLayout bzw. GridBagLayout) darstellen, als zwangshaft das in ein JLabel zu packen.
 
Danke für die Tipps!

Das mit dem escapen mittels &nsbp; klappt leider nicht. "&nsbp;" wird damit nur als zusätzlicher Text für den Eintrag behandelt und macht den Eintrag noch länger.

Dumme Frage, wie müsste man das über style="width:35em" machen? Damit muss ich mich erst einmal befassen.

Warum ist HTML-vormatierter Text eine Vergewaltigung eines Labels? Ich finde es als ausgezeichnete Möglichkeit, einen Text zu formatieren.

Gruß, kodela
 
Dreher drin nbsp; ist das HTML-Escaping für ein Leerzeichen.

Ich empfinde den Versuch in ein JLabel einen größeren Textblock zu pressen und zu layouten als etwas wofür ein JLabel nicht gedacht ist.

Aus der Java-Doc:
A display area for a short text string or an image, or both. A label does not react to input events. As a result, it cannot get the keyboard focus. A label can, however, display a keyboard alternative as a convenience for a nearby component that has a keyboard alternative but can't display it.

Grundsätzlich geht das schon, aber für mich fühlt sich Layout Infos in ein Label reinzupacken falsch an 🙂
 
Das kann man drehen wie man will, auch 'nbsp;' wird nur als zusätzlicher Text behandelt.

Ich habe jetzt durch einen Tab mit '\t' etwas Abstand erreicht. Ist nicht ganz so groß, wie ich mir gewünscht hätte, aber besser als nur ein Leerzeichen. Zwei Tabs bringen aber auch nicht mehr, als einer.

Na ja, was noch kurz ist, das kann man wohl so oder so sehen.

1607604447101.png

Ist für mich doch kein langer Text und der Anwender kann ihn zur Kenntnis nehmen. Zu tun hat er nichts. Der Hinweis verschwindet bei der nächsten Aktion des Anwenders von alleine.

Übrigens, dieses Label wird für eine ganze Menge von Hinweisen verwendet.

Gruß, kodela
 

Zurück
Oben