簡體   English   中英

JavaFX 8 如何將程序圖標設置為警報?

[英]JavaFX 8 How to set program icon to alert?

如何在不使用alert.initOwner()情況下將程序圖標設置為警報? 為什么沒有initOwner 這是因為在初始化整個窗口之前必須顯示一些警報,所以沒有可以放入initOwner函數的場景。

您可以從 Alert 實例中竊取DialogPane ,並將其添加到常規 Stage。 一個Node一次只能是一個Scene的root,所以需要先替換Alert的Scene的root:

public class AlertWithIcon
extends Application {
    @Override
    public void start(Stage stage) {
        Alert alert = new Alert(Alert.AlertType.CONFIRMATION,
            "Are you sure you want to delete this item?",
            ButtonType.YES, ButtonType.NO);
        alert.setHeaderText("Delete Item");

        DialogPane pane = alert.getDialogPane();

        ObjectProperty<ButtonType> result = new SimpleObjectProperty<>();
        for (ButtonType type : pane.getButtonTypes()) {
            ButtonType resultValue = type;
            ((Button) pane.lookupButton(type)).setOnAction(e -> {
                result.set(resultValue);
                pane.getScene().getWindow().hide();
            });
        }

        pane.getScene().setRoot(new Label());
        Scene scene = new Scene(pane);

        Stage dialog = new Stage();
        dialog.setScene(scene);
        dialog.setTitle("Delete Item");
        dialog.getIcons().add(new Image("GenericApp.png"));

        result.set(null);
        dialog.showAndWait();

        System.out.println("Result is " + result);
    }
}
public class AlertWithIcon
extends Application {
    @Override
    public void start(Stage stage) {
        Alert alert = new Alert(Alert.AlertType.CONFIRMATION,
            "Are you sure you want to delete this item?",
        ButtonType.YES, ButtonType.NO);    
       alert.setHeaderText("Delete Item"); 
   ((Stage)alert.getDialogPane().getScene().getWindow()).getIcons().add(new image("GenericApp.png"));
    alert.showAndWait();
}
}

這是如何完成的:

// Get the Stage.
Stage stage = (Stage) alert.getDialogPane().getScene().getWindow();

// Add a custom icon.
stage.getIcons().stage.getIcons().add(new Image("images/logo_full3.png"));

上面的圖片參考可能有問題。 但是你可以嘗試配置,只要它有效。 這就是我的方式(我使用 maven)。 如果您不使用 maven,您的情況可能會有所不同。

完整教程在這里:警報 javafx 教程

正確的實現如下上面的評論:

// Get the Stage.
Stage stage = (Stage) alert.getDialogPane().getScene().getWindow();

// Add a custom icon.
stage.getIcons().add(new Image(getClass().getResourceAsStream("images/logo_full3.png")));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM