2013-05-01 4 views
8

Ich verwende JDK8 build 87 und möchte css stylesheets dynamisch so hinzufügen und entfernen, dass sie von meiner ganzen JavaFX Anwendung verwendet werden können.Wie kann ich CSS für die gesamte JavaFX-Anwendung dynamisch hinzufügen und entfernen?

Im Moment bin ich die Einstellung der Standard styleSheet mit diesem Befehl:

Application.setUserAgentStylesheet(Application.STYLESHEET_MODENA); 

und dann, wenn ich eine zusätzliche CSS-Stylesheet hinzufügen möchte ich dies tun:

com.sun.javafx.css.StyleManager.getInstance.addUserAgentStylesheet(styleSheet); 

Dies funktioniert aber ich habe zwei Probleme. Erstens verwendet es eine privateAPI und zweitens scheint es keine Möglichkeit zu sein, es zu entfernen, sobald ich damit fertig bin (ich verwende OSGI, so ist es üblich für Module zu kommen und zu gehen).

Es war die Rede über StyleManager zu öffentlichenAPI zu Beginn des Jahres 2012 bewegen, aber ich bin mir nicht sicher, etwas über das geschehen ist.

Kennt jemand eine öffentliche Methode, um styleSheets hinzuzufügen, so dass sie für die gesamte JavaFX Anwendung gelten? Wie würde man sie auch entfernen?

(ich habe nicht die Privilegien den neuen JavaFX-8-Tag erstellen)

+1

hinzugefügt neues Tag, danke für den Vorschlag. –

+0

BTW, wenn Sie keine passende Lösung finden, können Sie versuchen, für Tweak oder RFE auf javafx-jira bugtracker nachschlagen, und wenn Sie keine One - Datei finden Sie Ihre zwicken - während es nicht spät ist .. –

Antwort

3

Nach Global Stylesheet for your GUI application:

// load default global stylesheet 
Application.setUserAgentStylesheet(null); 
// add custom global stylesheet 
StyleManager.getInstance().addUserAgentStylesheet(AQUA_CSS_NAME); 

jedoch als Boomah weist darauf hin, StyleManager.getInstance().addUserAgentStylesheet ist nicht Teil der JavaFX-API, so dass diese Methode wirklich nicht empfohlen wird, dass sie direkt aus Benutzercode verwendet wird. Darüber hinaus funktioniert es nur zum Hinzufügen eines globalen Stylesheets und nicht zum Entfernen eines solchen Stylesheets, nachdem das Stylesheet hinzugefügt wurde.


Die Abenteurer können einen Patch erstellen Boomah vorgeschlagenen Funktion durch Änderung des StyleManager Code zur Unterstützung der Entfernung von globalen Stylesheets und die Änderung von Application Klasse Quellcode, um eine öffentliche API für die neue Funktion, die Verwendung der Marken hinzufügen aktualisiert StyleManager, dann senden Sie den Patch an openjfx-dev für die Aufnahme in die JavaFX-Plattform. Art von Schmerzen, aber es gibt sie -


In der Zwischenzeit können Sie manuell Ihren Benutzersheet auf jedem Ihrer Anwendung Szenen eingestellt. . .

+0

I Ich bin glücklich, das Stylesheet der obersten Ebene auf STYLESHEET_MODENA zu setzen, wie in meinem obigen Beispiel gezeigt. Es ist der StyleManager, der eine private API ist und sogar nicht die Möglichkeit hat, zusätzliche Stylesheets zu entfernen, nachdem sie festgelegt wurden. – Boomah

+0

Korrigieren, um die gewünschte Funktion zu erhalten, müssen Sie einen Patch senden, um die Funktion zu implementieren oder [erstellen Sie eine Feature-Anfrage] (https://javafx-jira.kenai.com) – jewelsea

+0

OK, ich habe mit Jonathan Giles darüber gesprochen Dies. Er schlug vor, nur alle Szenen hinzuzufügen.Es ist kein großes Problem, da ich Zugang zu allen habe, es scheint nur, dass es einen besseren Weg geben sollte, dies zu tun. Danke – Boomah

Verwandte Themen