2013-02-20 19 views
19

Próbuję utworzyć ekran powitalny, tak jak na przykładzie, który sam utworzyłem. Wygląda na to, że AnchorPane nie zezwala na przezroczyste tło. Próbowałem ustawić wartość parametru css na AnchorPane na -fx-background-color: rgba(255,0,255,0.1) ;, ale białe tło nadal się wyświetla.Jak utworzyć ekran powitalny z przezroczystym tłem w JavaFX

Wszystko mam w moim pliku fxml jest AnchorPane z ImageView z zawierać PNG

Example

szukałem wszędzie, ale nie mogę znaleźć żadnego rozwiązania, każda pomoc będzie mile widziane. Dzięki

Odpowiedz

19

Spróbuj JavaFX splash sample utworzony na pytanie Stackoverflow: Designing a splash screen (java). Oraz follow up sample, która zapewnia również informację o postępie procesu inicjalizacji aplikacji.

JavaFX oferuje interfejs Preloader dla płynnego transferu z splash do aplikacji, ale powyższe próbki nie wykorzystują go.

Powyższe próbki rozprysku również nie dają efektu przezroczystości, ale ten dialog sample pokazuje, jak to zrobić i można połączyć go z poprzednimi próbkami rozpryskowymi, aby uzyskać pożądany efekt.

Efekt przezroczysty jest tworzony przez:

  1. stage.initStyle(StageStyle.TRANSPARENT).
  2. scene.setFill(Color.TRANSPARENT).
  3. Zapewnienie węzła głównego nie jest nieprzezroczystym kwadratowym prostokątem.

Wszystko to zostało zademonstrowane w próbce Siergieja.

Powiązane pytanie:

Aktualizacja kwietnia 2016 na podstawie dodatkowych pytań

preloader obraz isnt na pierwszym planie. Próbowałem stage.toFront(), ale nie pomaga.

Nowy interfejs API został utworzony w języku Java 8u20 stage.setAlwaysOnTop(true). Zaktualizowałem linked sample, aby użyć tego na początkowym ekranie powitalnym, co pomaga w płynniejszym przejściu do głównego ekranu.

Dla Java8 +

Dla modena.css (domyślnie JavaFX wyglądać i czuć się definicję w Java 8), niewielkie szare został wprowadzony do wszystkich elementów sterujących (a także do Tafle gdy kontrola jest ładowany).

Możesz usunąć to, określając, że domyślne tło jest przezroczyste. Można to zrobić dodając następującą linię do pliku CSS danej aplikacji:

.root { -fx-background-color: transparent; } 

Jeśli chcesz, możesz użyć klas stylów CSS i zasady lub połączenia setStyle (co wykazano w odpowiedzi Sergey), aby upewnić się, że ustawienia dotyczy tylko katalogu głównego ekranu powitalnego, a nie wszystkich ekranów aplikacji.

zobacz sekcję:

+1

+1 za wzmiankę o Preloaderze – Puce

+0

Dzięki chłopaki! Obie odpowiedzi są dobre, ale "scene.setFill (Color.TRANSPARENT)." Nie musisz określać szerokości i wysokości sceny – francisOpt

+0

Wystąpił milisekundowy ruch z tłem widocznym po pokazaniu sceny. Udało mi się rozwiązać ten problem, wywołując: 'root.setCache (true); root.setCacheHint (CacheHint.SPEED); '_ (gdzie root to instancja nadrzędna) _. – stuchl4n3k

13

Musisz mieć przezroczyste Stage i Scene do tego. Pane samo w sobie nie ma koloru.

public void start(Stage primaryStage) { 
    Button btn = new Button("Say 'Hello World'"); 

    AnchorPane root = new AnchorPane(); 
    root.getChildren().add(btn); 

    // Java 8: requires setting the layout pane background style to transparent 
    // https://bugs.openjdk.java.net/browse/JDK-8092764 
    // "Modena uses a non-transparent background by default" 
    root.setStyle("-fx-background-color: transparent;"); 

    Scene scene = new Scene(root, 300, 250, Color.TRANSPARENT); 
    primaryStage.initStyle(StageStyle.TRANSPARENT); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 
+0

jak będę to testy jednostkowe. Po prostu próbowałem to przetestować, ale nie wyświetla się w wątku aplikacji. – vinay

+0

@twoj następne pytania: http://stackoverflow.com/questions/11385604/how-do-you-unit-test-a-javafx-controller-with-jitit i http://stackoverflow.com/ pytania/10599724/gui-testing-framework-for-javafx-2/10600676 –

Powiązane problemy