JavaFX TextArea dynamisch Icon im Background anzeigen

javafx

Mitglied
Hallo,

in meiner Anwendung werden TextFields als Pflichtfeld markiert, in dem ich ein Icon im Background anzeige.

Im Java Code sobald ein Feld leer ist
Code:
textField.getStyleClass().add("requiredTextField");

Im Java Code sobald ein Feld nicht mehr leer ist
Code:
textField.getStyleClass().remove("requiredTextField");

CSS
Code:
.requiredTextField {
    -fx-background-image:url("../pflichtfeld.png");
    -fx-background-repeat: no-repeat;
    -fx-background-position: right center;
 }

Das Gleiche möchte ich nun für ein TextArea machen. Leider klappt es nicht so wie ich will.

Sobald ich in meiner CSS immer folgendes setze
Code:
.text-area .scroll-pane .content{
    -fx-background-image:url("../pflichtfeld.png");
    -fx-background-repeat: no-repeat;
    -fx-background-position: right center;
}
wird mein Icon innerhalb der TextArea angezeigt. Aber leider nicht wenn ich dynamisch innerhalb vom Code was setze. Also textArea.getStyleClass().add("requiredTextField"); funktioniert nicht.

Kann mir jemand helfen was ich da dann im Code setzen muss? Bzw. auf was muss ich dann die StyleClass setzen?

Vielen Dank
 
Die Style-Klasse .text-area .scroll-pane .content ist ja auch nicht notwendigerweise das Selbe, wie die Styleklasse direkt auf das textArea-Objekt zu legen. Die CSS-Entsprechung wäre dann ja lediglich .text-area. Verstehst du?

Der folgende StackOverflow-Beitrag geht zwar nicht ganz in deine Richtung, aber vielleicht siehst du aus dem Code-Schnipsel, was du tun musst:
java - Transparent background of a textarea in JavaFX 8 - Stack Overflow

Soweit ich es verstehe, musst du also dir die Kinder der Textarea geben lassen (#getChildrenUnmodifiable), das ScrollPane suchen, und dort dann wieder das entsprechende Kind, das den Content darstellt.
Savvy?
 
Vielen herzlichen Dank für deine Antwort!

Den Link von dir hatte ich auch schon gefunden und habe damit auch schon rum probiert.
Mit dem Setzen auf die Children usw. habe ich auch wirklich erreicht, dass ich mein Icon angezeigt bekommen.
Ich habe es auch alle Children gesetzt. Natürlich haben es dann alle Children wie ScrollPane, ScollBar usw., was dann auch schlecht aussieht. Etwas dran rum und nur bei bestimmten Objekten gesetzt, aber es war alles wirklich nicht schön.

Meine Lösung fürs Erste ist jetzt, dass ich ein ImageView neben dem TextArea anzeige. Dem ChangeListener gebe ich dann den ImageView mit und setze dieses sichtbar oder halt nicht sichtbar.

Ich habe nicht so viel TextAreas in meinem Programm, so dass diese Lösung für mich erst mal ok ist.

Sollte noch jemand eine schönere Lösung über css haben, bin ich jedoch komplett offen und würde diese gerne testen.

Vielen Dank weiterhin für eure Rückmeldung.
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben