2013-05-01 12 views
8

Używam JDK8 build 87 i chcę dynamicznie dodawać i usuwać css stylesheets w taki sposób, że mogą one być używane przez moją całą aplikację JavaFX.Jak dynamicznie dodawać i usuwać css dla całej aplikacji JavaFX?

W tej chwili mam ustawienie domyślne styleSheet poleceniem:

Application.setUserAgentStylesheet(Application.STYLESHEET_MODENA); 

a gdy chcę dodać dodatkowy arkusz stylów CSS to zrobić:

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

to działa ale mam dwa problemy. Po pierwsze, używa on prywatnejAPI, a po drugie nie wydaje się, aby można go było usunąć po skończeniu pracy (używam OSGI, dlatego często moduły przychodzą i odchodzą).

Mówiło się o przeprowadzce StyleManager do publicznejAPI na początku 2012 roku, ale nie jestem pewien, coś działo się z tego powodu.

Czy ktoś wie o publicznej metodzie dodawania styleSheets w taki sposób, że mają one zastosowanie do całej aplikacji JavaFX? Jak je usunąć?

(nie mam uprawnień, aby utworzyć nowy JavaFX-8 tag)

+1

dodano nowy znacznik, dzięki za sugestię. –

+0

BTW, jeśli nie znajdziesz odpowiedniego rozwiązania, możesz spróbować sprawdzić poprawność lub RFE na bugtracker javafx-jira, a jeśli nie znajdziesz nikogo - zgłoś swoje poprawki - podczas gdy nie jest późno .. –

Odpowiedz

3

Według Global Stylesheet for your GUI application:

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

Jednak jak Boomah wskazuje StyleManager.getInstance().addUserAgentStylesheet nie jest częścią JavaFX API, więc ta metoda naprawdę nie jest zalecana do użycia bezpośrednio z kodu użytkownika. Dodatkowo działa tylko w przypadku dodawania globalnego arkusza stylów, a nie usuwania takiego arkusza stylów po dodaniu arkusza stylów.


Im bardziej ryzykowny może stworzyć łatkę aby dodać sugerowaną funkcję Boomah poprzez modyfikację kodu StyleManager wspierać usuwanie światowych stylów i modyfikowanie kodu źródłowego Application klasy dostarczenie API publicznego dla nowej funkcji, która wykorzystuje zaktualizowano StyleManager, a następnie przesłano poprawkę do wersji openjfx-dev w celu umieszczenia jej na platformie JavaFX.


W międzyczasie można ręcznie ustawić arkusz stylów użytkownika na każdej scenie aplikacji - rodzaj bólu, ale jesteś. . .

+0

I "Jestem szczęśliwy, ustawiając arkusz stylów najwyższego poziomu na STYLESHEET_MODENA, jak pokazano w moim przykładzie powyżej. Jest to menedżer stylów, który jest prywatnym interfejsem API, a nawet nie ma możliwości usuwania dodatkowych arkuszy stylów po ich ustawieniu. – Boomah

+0

Prawidłowo, aby uzyskać pożądaną funkcję, musisz przesłać poprawkę do implementacji funkcji lub [utworzyć żądanie funkcji] (https://javafx-jira.kenai.com) – jewelsea

+0

OK, rozmawiałem z Jonathanem Gilesem o to. Zasugerował także dodanie wszystkich scen.To nie jest ogromny problem, ponieważ mam do nich dostęp, wydaje się, że powinien istnieć lepszy sposób na zrobienie tego. Dzięki – Boomah

Powiązane problemy