# Text eines TreeItem einfärben



## godi (12. Nov 2012)

Hallo,

ist es möglich in JavaFX2 einem TreeItem eine Farbe zu übergeben so das der Text im Baum diese Farbe annimmt?

godi


----------



## AngryDeveloper (12. Nov 2012)

Wenn du dir die API über TreeItem durchliest, wirst du hierauf stoßen:


> Note however that a TreeItem is *not *a Node, and therefore no visual events will be fired on the TreeItem. To get these events, it is necessary to add relevant observers to the TreeCell instances (via a custom cell factory - see the Cell class documentation for more details).


[TreeItem]

TreeItem ist also nur das Model.

Für die Views sind dann Cells zuständig:
Cell


----------



## godi (12. Nov 2012)

Ok, jetzt weiß ich für was die CellFactory gut ist. 

Also das einfärben funktioniert schon mal ganz gut.
Dazu habe ich mal das Beispiel 14.3 aus der JavaFX2 Dokumentation hergenommen und in der Klasse TextFieldTreeCellImpl in der Methode updateItem(), setTextFill(Color.RED); hinzugefügt.

Da man aber jetzt den selektierten Text sehr schwer lesen kann da dieser Blau umrandet ist würde ich diesen gerne weiß setzen wenn er selektiert ist. So wie beim originalem Tree.
Dazu habe ich die Methode updateSelected hinzugefügt und dort den Text auf weiß gesetzt.
Wenn jetzt aber ein anderer Eintrag selektiert wird dann bleibt der vorhergehende Eintrag auf weiß und geht nicht mehr in die ursprüngliche Farbe zurück.

Wie kann ich jetzt dem Eintrag die ursprüngliche Farbe zurückgeben? ???:L

godi


----------



## godi (13. Nov 2012)

Anscheinend war es zu leicht das ich gleich draufgekommen bin. 

Da ich in der updateSelected Methode auf das Item zugreifen kann, kann ich ja dort wieder die alte Farbe auslesen. Somit beschränkt sich die updateSelected Methode auf folgenden Code:


```
@Override
		public void updateSelected(boolean arg0) {			
			super.updateSelected(arg0);
			setTextFill(arg0 ? Color.WHITE : getItem().getColor());			
		}
```

godi


----------



## AngryDeveloper (13. Nov 2012)

Ich würde allerdings empfehlen das ganze über CSS zu machen. Das ist wesentlich flexibler und du kannst in Zukunft auch verschiedene Styles anbieten.


----------



## godi (13. Nov 2012)

AngryDeveloper hat gesagt.:


> Ich würde allerdings empfehlen das ganze über CSS zu machen. Das ist wesentlich flexibler und du kannst in Zukunft auch verschiedene Styles anbieten.



Ja nur kenne ich mich mit CSS gar nicht aus und in JavaFX arbeite ich mich gerade erst ein bzw mache ich überhaupt erst mein erstes sinnvolles Java - Projekt.
=> ich glaube das würde mich ein wenig überfordern oder?

Aber in dem Tree Beispiel von oben wird die Farbe eh in den Objekten die in dem Tree eingefügt werden hinterlegt.
Diese können dann vom Benutzer je nach Objekttype eingestellt werden.


----------



## miasma (16. Nov 2012)

Nice, endlich generics für ein TreeModel (bei Swing ja immernoch Object-Referenzen wegen Rückwärtskompatibilität). Wie ist das jetzt eigentlich, kann man JavaFX in Swing einbetten? Bzw. wie stellt man eine Swing GUI am besten auf JavaFX um ohne wirklich alles neu machen zu müssen? Habe in Swing schon die processing-library eingebettet und einige "Views" basieren auf dem JApplet was immernoch Probleme bereitet zwecks heavyweight vs. lightweight... erst mit irgendeiner JVM-Option um den layout-Algorithmus in Swing zu ändern ging es einigermaßen. Nur resizen ist übel... aber deswegen will ich mir ja eigentlich nicht noch mehr Probleme einhandeln ;-)

Will aber definitiv in Zukunft JavaFX verwenden aber die jeweiligen Swing-Views/Processing-Views dennoch weiterverwenden, geht das?

Viele Grüße,
Johannes


----------



## miasma (16. Nov 2012)

BTW: Wird JavaFX jetzt offiziell als Swing-Nachfolger gesehen? Auf der Swing-Mailingliste gibts ja immernoch ab und an commits, könnten aber auch nur noch bugfixes sein, keine Ahnung ;-)


----------



## Paddelpirat (16. Nov 2012)

Zum Thema JavaFX in Swing einbetten gibt es ein eigenes Kapitel in der JavaFX 2 Doku:

JavaFX for Swing Developers: About This Tutorial | JavaFX 2 Tutorials and Documentation

Die Umkehrung Swing in JavaFX einzubetten geht hingegen nicht.


----------

