Ein einzeiliges Label mit dem HTML-Text in Swing / Line Wrapping ausschalten

wassermann_2005

Grünschnabel
Hallo!

Ich möchte gerne HTML für das Layout meiner Labels benutzen, die aber unbedingt einzeilig sein sollen (was man normalerweise von Labels erwartet). Das Problem liegt aber daran, dass wenn die Größe des Labels zu klein ist und mein Text ein HTML-Text ist, dann wird die Größe des Labels automatisch angepasst. In diesem Fall wird irgendwie die gesetzte Größe gar nicht berücksichtigt und das kann sogar dazu führen (abhängig vom Layout), dass vieles abgeschnitten wird. Ich habe schon auch mit dem Setzen von PreferredSize usw. ausprobiert.

Mein Ziel ist, dass die Labels mit dem HTML-Text genau so sich verhalten, wie die Labels mit dem normalen Text (nicht HTML), d.h. wenn der Text zu lange ist, dann wird der Text abgeschnitten und man sieht am Ende "..."

Weiß jemand, wie ich das erreichen kann? Welche Methoden muss ich eventuell überschreiben oder wie kann ich das automatische Line Wrapping deaktivieren, damit keine "newlines" automatisch hinzugefügt werden?

Viele Dank im Voraus.

Hier ist ein Beispielcode zum Ausprobieren:

public class HTMLLabel {

public static void main(String[] a) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


JLabel label1 = new JLabel("My Label Label Label Label");
label1.setSize(100,20);
JLabel label2 = new JLabel("<html>My <i>HTML</i> Label Label Label Label</html>");
label2.setSize(100,20);

frame.add(label1);
frame.add(label2);

frame.setSize(100, 200);
frame.setVisible(true);
}
}
 
Hi wassermann_2005,
Vorweg: Falls ich jetzt daneben liegen soltle, bitte ich mich eines Besseren zu belehren!

Ich glaube das das gar nicht so einfach mit dem HTML-Format geht.
Das Verhalten der "normalen "Label-Beschriftung ist meiner Einschätzung nach intern programmatisch gelöst. Vermutlich Vergleich der Länge des bereitgestellten Platzes auf dem Label mit der potentiellen Länge der "String-Zeichnung" für den Label. Wenn "String-Zeichnungslänge" zu lang dann Kappen und Pünktchen malen.
Bei dem HTML-Formatierung wird eine solche Abfrage vermute ich mal, nicht gemacht, denn es ist ja auch nicht das normale Verhalten einer HTML-Ausgabe, oder?

Für Dein Vorhaben müsste also erst mal die Möglichkeit gesucht werden die potentiellen Dimension der HTML-Ausgabe abzufragen um Sie mit dem vorhandenen Platz vergleichen zu können. Als nächstes müsste die HTML-Ausgabe geändert werden.
Ohne in die Sourcen geschaut zu haben befürchte ich , dass es nicht zufriedenstellend gelöst werden kann ohne imensen Aufwand zu haben.
 
Zuletzt bearbeitet:
Du könntest etwas event. von ComponentListener oder -Adapter erben lassen. In beiden Fällen kannst du die componentResized-Methode überschreiben, und vielleicht selbst eine Prüfroutine bauen, die den Text kürzt.
Beim Listener musst du 3 Klassen implementieren, beim Adapter kannst du natürlich von keiner anderen Klasse erben.
 
Zurück