2014-11-07 24 views
9

Tôi mới sử dụng JavaFX và tôi tự hỏi liệu có một số tương đương với Android Toast không? Tôi đã thấy lớp Notification, nhưng có vẻ như nó chỉ có thể được hiển thị trong ứng dụng. Tôi cũng thấy rằng tôi có thể sử dụng một số Timer và tô bóng cho một số Label, nhưng nếu có một số lớp để sử dụng, tôi sẽ tốt hơn!Android tương đương với bánh mì nướng trong JavaFX

Cảm ơn!

Trả lời

6

Hãy thử bên thứ ba ControlsFX Notifications or Notification Pane.

"Việc kiểm soát NotificationPane cho phép bạn để thông báo cho người dùng của bạn một cái gì đó mà không đòi hỏi đầu vào trực tiếp của mình (mà bạn có thể làm với các hộp thoại ControlsFX API). Các NotificationPane sẽ animate trong và ngoài tầm nhìn"

toast1

Thông báo "sẽ hiển thị thông báo thông báo cho người dùng ở một trong chín vị trí trên màn hình ... Sau một khoảng thời gian đã đặt, thông báo sẽ mờ dần".

toast2

19

Tôi biết nó đã được một thời gian dài kể từ khi bạn đăng bài này, nhưng tôi đã chỉ cần thực hiện một thông báo bánh mì nướng android-như cho JavaFX, vì vậy tôi đăng nó ở đây trong trường hợp có ai đó cần loại mã này .

import javafx.animation.KeyFrame; 
import javafx.animation.KeyValue; 
import javafx.animation.Timeline; 
import javafx.scene.Scene; 
import javafx.scene.layout.StackPane; 
import javafx.scene.paint.Color; 
import javafx.scene.text.Font; 
import javafx.scene.text.Text; 
import javafx.stage.Stage; 
import javafx.stage.StageStyle; 
import javafx.util.Duration; 

public final class Toast 
{ 
    public static void makeText(Stage ownerStage, String toastMsg, int toastDelay, int fadeInDelay, int fadeOutDelay) 
    { 
     Stage toastStage=new Stage(); 
     toastStage.initOwner(ownerStage); 
     toastStage.setResizable(false); 
     toastStage.initStyle(StageStyle.TRANSPARENT); 

     Text text = new Text(toastMsg); 
     text.setFont(Font.font("Verdana", 40)); 
     text.setFill(Color.RED); 

     StackPane root = new StackPane(text); 
     root.setStyle("-fx-background-radius: 20; -fx-background-color: rgba(0, 0, 0, 0.2); -fx-padding: 50px;"); 
     root.setOpacity(0); 

     Scene scene = new Scene(root); 
     scene.setFill(Color.TRANSPARENT); 
     toastStage.setScene(scene); 
     toastStage.show(); 

     Timeline fadeInTimeline = new Timeline(); 
     KeyFrame fadeInKey1 = new KeyFrame(Duration.millis(fadeInDelay), new KeyValue (toastStage.getScene().getRoot().opacityProperty(), 1)); 
     fadeInTimeline.getKeyFrames().add(fadeInKey1); 
     fadeInTimeline.setOnFinished((ae) -> 
     { 
      new Thread(() -> { 
       try 
       { 
        Thread.sleep(toastDelay); 
       } 
       catch (InterruptedException e) 
       { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
        Timeline fadeOutTimeline = new Timeline(); 
        KeyFrame fadeOutKey1 = new KeyFrame(Duration.millis(fadeOutDelay), new KeyValue (toastStage.getScene().getRoot().opacityProperty(), 0)); 
        fadeOutTimeline.getKeyFrames().add(fadeOutKey1); 
        fadeOutTimeline.setOnFinished((aeb) -> toastStage.close()); 
        fadeOutTimeline.play(); 
      }).start(); 
     }); 
     fadeInTimeline.play(); 
    } 
} 

Bạn có thể tạo ra một thông điệp chúc mừng từ bất kỳ lớp với mã này:

String toastMsg = "some text..."; 
int toastMsgTime = 3500; //3.5 seconds 
int fadeInTime = 500; //0.5 seconds 
int fadeOutTime= 500; //0.5 seconds 
Toast.makeText(primarystage, toastMsg, toastMsgTime, fadeInTime, fadeOutTime); 
+0

này hoạt động như quảng cáo, vì vậy 1 từ tôi. Nhưng cuối cùng tôi không cần nó;) – Christian

+0

Người làm việc tốt, câu trả lời này sẽ có nhiều phiếu bầu hơn. – VAdaihiep

+0

"primaryStage" là gì? –

Các vấn đề liên quan