Mein Problem gerade ist recht einfach zu beschreiben: ich will einen Text mit HTML formatieren und darstellen können. In Swing konnten die Labels das out-of-the-box und in JavaFX … nicht. Das einzige was ich hier nach meinen Recherchen zufolge zur Verfügung habe ist die WebView. Diese schafft leider nur weitere Probleme:
Der Hintergrund ist immer weiß (die Anwendung an sich ist aber dunkel). Durch setzen vom Blend-Modus ( Transparent background in the WebView in JavaFX - Stack Overflow ) könnte man das zwar in den Griff bekommen - aber keine Ahnung ob das nicht irgendwann mal Probleme macht.
Das stylen wird erheblich verkompliziert. Styles die in der css-Datei definiert sind funktionieren damit nicht mehr.
Kennt ihr eine alternative - oder bin ich echt auf die WebView angewiesen?
In FX ist ein Label nur “als ganzes” formatierbar. Einzelne Teile zu formatieren ist nicht vorgesehen. Du musst also Dein “Gesamtlabel” aus verschiedenen einzelnen Zusammenstückeln, oder eben WebView nehmen.
Ich würde mir wohl ein neues Label aus einem FlowPane oder einem GridPane basteln, und da die Teile des Labels, die anders aussehen sollen, rein werfen.
Und genau das möchte ich umgehen. Der Text ist ja nicht hardcodiert sondern kommt aus Sprachdateien. Und genau dort wird eben gerne auch mal HTML verwendet. Eine ähnliche “Lösung” findet man auch auf google - dort wird das ganze aber mit TextFlow zusammengebaut (sorry, hab ich vergessen zu erwähnen).
Da würde ich noch eher die WebView vorziehen. Aber unterm Strich ist keins von beiden für mich eine wirklich zufrieden stellende Lösung.
Hab mir mal Gedacht: back-to-the-roots und das hier ausprobiert:
JLabel label = new JLabel("<html><b>Hallo</b><br /><u>welt</u></html>");
label.setOpaque(false);
SwingNode swingNode = new SwingNode();
swingNode.setStyle("-fx-text-fill: #ffffff;"); // <-- zeigt keine Wirkung
swingNode.setContent(label);```
Allerdings kann ich damit die Textfarbe nicht einfärben. Das könnte früher oder später zum Problem werden.
[quote=Tomate_Salat;136914]Der Text ist ja nicht hardcodiert sondern kommt aus Sprachdateien.[/quote]Also lokalisierte feste Texte oder was, dass die user verändern?
[quote=Tomate_Salat;136914]Und genau dort wird eben gerne auch mal HTML verwendet.[/quote]Dass man das gerne macht heißt noch nicht, dass das gut wäre…
Wenn es lokalisierte feste Texte sind kann man die sicher auch anders als mit HTML so strukturieren, dass man die Teiltexte in die “Farbrereiche” des Labels aufteilen kann.
Zur Not zerpflückt man das HTML eben mit ienem HTML-parser…
Hallo.
Ich weiß das es dir nicht bei HTML helfen wird, doch zur Textgestaltung kann man in JavaFX auch mit https://docs.oracle.com/javase/8/javafx/api/javafx/scene/text/TextFlow.html arbeiten.
Ob es bequem ist sei mal dahingestellt aber vielleicht hilft es dir dein Ziel auf andere Art und Weise zu erreichen.