2013-02-20 33 views
19

Tôi đang cố tạo màn hình giật gân như ví dụ tôi đã minh họa. Dường như AnchorPane không cho phép nền trong suốt, tôi đã thử đặt css của AnchorPane thành -fx-background-color: rgba(255,0,255,0.1) ; nhưng nền trắng vẫn hiển thị.Cách tạo màn hình Splash với nền trong suốt trong JavaFX

Tất cả tôi có trong tập tin fxml của tôi là một AnchorPane với ImageView với chứa các hình ảnh png

Example

Tôi đã tìm kiếm khắp nơi nhưng không thể tìm thấy bất kỳ giải pháp, bất kỳ trợ giúp sẽ được đánh giá cao. Cảm ơn

Trả lời

19

Hãy thử điều này JavaFX splash sample được tạo cho câu hỏi Stackoverflow: Designing a splash screen (java). Và follow up sample cũng cung cấp phản hồi tiến trình khởi tạo ứng dụng.

JavaFX cung cấp giao diện Preloader để chuyển trơn tru từ giật gân sang ứng dụng, nhưng các mẫu ở trên không tận dụng được.

Các mẫu giật gân ở trên cũng không làm hiệu ứng trong suốt, nhưng dialog sample cho bạn biết cách thực hiện điều đó và bạn có thể kết hợp nó với các mẫu giật gân trước đó để có được hiệu ứng bạn muốn.

Hiệu quả trong suốt được tạo ra bởi:

  1. stage.initStyle(StageStyle.TRANSPARENT).
  2. scene.setFill(Color.TRANSPARENT).
  3. Đảm bảo nút gốc của bạn không phải là hình chữ nhật vuông mờ đục.

Tất cả được minh họa trong mẫu của Sergey.

câu hỏi liên quan:

Cập nhật tháng 4 năm 2016 dựa trên những câu hỏi thêm

hình ảnh isnt preloader ở mặt trước. Tôi đã thử stage.toFront(), nhưng không giúp đỡ.

API mới được tạo trong Java 8u20 stage.setAlwaysOnTop(true). Tôi đã cập nhật linked sample để sử dụng màn hình này trên màn hình giật gân ban đầu, giúp hỗ trợ quá trình chuyển đổi mượt mà hơn sang màn hình chính.

Đối Java8 +

Đối modena.css (mặc định JavaFX xem và cảm nhận nét trong Java 8), một nền bóng mờ nhẹ đã được giới thiệu cho tất cả các điều khiển (và cũng để Panes nếu một điều khiển được nạp).

Bạn có thể loại bỏ điều này bằng cách xác định rằng nền mặc định là trong suốt. Điều này có thể được thực hiện bằng cách thêm dòng sau vào tập tin CSS của ứng dụng của bạn:

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

Nếu bạn muốn, bạn có thể sử dụng các kiểu class CSS và quy tắc hay một cuộc gọi setStyle (như đã chứng minh trong câu trả lời của Sergey) để đảm bảo rằng các thiết lập chỉ áp dụng cho thư mục gốc của màn hình của bạn thay vì tất cả màn hình ứng dụng của bạn.

Xem liên quan:

+1

+1 để đề cập đến Trình tải trước – Puce

+0

Xin cảm ơn các bạn! Cả hai câu trả lời đều tốt nhưng 'scene.setFill (Color.TRANSPARENT) .' bạn không cần phải xác định chiều rộng và chiều cao của cảnh – francisOpt

+0

Tôi đã trải qua một phần nghìn giây với nền hiển thị khi giai đoạn được hiển thị. Tôi đã giải quyết vấn đề này bằng cách gọi: 'root.setCache (true); root.setCacheHint (CacheHint.SPEED); '_ (trong đó root là Parent instance) _. – stuchl4n3k

13

Bạn cần phải minh bạch StageScene cho điều đó. Pane không có màu.

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

sẽ như thế nào tôi kiểm tra đơn vị này. Tôi chỉ đơn giản là cố gắng để đơn vị kiểm tra này, nhưng nó cho thấy không phải về lỗi thread ứng dụng fx. – vinay

+0

@vinay hãy xem các câu hỏi tiếp theo: http://stackoverflow.com/questions/11385604/how-do-you-unit-test-a-javafx-controller-with-junit và http://stackoverflow.com/ câu hỏi/10599724/gui-testing-framework-for-javafx-2/10600676 –