我可能会缺少一些非常明显的东西,但是我无法找到如何设置对话框组件的图标(ProgressDialog更精确).我知道如何做一个Stage,this.primaryStage.getIcons().add(new
Image(getClass().getResourceAsStream(“/ icon / logo.png”)))但是我没有找到Dialog系列的任何东西.不知何故,设置舞台图标不会影响对话框图标.
谢谢
解决方法
Marco Jakob有一个非常好的教程
here,您可以在其中找到不仅如何使用对话框,还可以找到如何解决您的问题.
对于新的对话框(在JDK8u40早期版本中,或者具有JDK 8u25的openjfx-dialogs),或者对于ControlsFX的对话框,为了设置对话框的图标,可以使用此solution:
- Stage stage = (Stage) dialog.getDialogPane().getScene().getWindow();
- stage.getIcons().add(
- new Image(this.getClass().getResource("<image>.png").toString()));
此代码段显示如何使用ControlsFX中的ProgressDialog,并为对话框设置图标:
- @Override
- public void start(Stage primaryStage) {
- Service<Void> service = new Service<Void>() {
- @Override protected Task<Void> createTask() {
- return new Task<Void>() {
- @Override protected Void call() throws InterruptedException {
- updateMessage("Message . . .");
- updateProgress(0,10);
- for (int i = 0; i < 10; i++) {
- Thread.sleep(300);
- updateProgress(i + 1,10);
- updateMessage("Progress " + (i + 1) + " of 10");
- }
- updateMessage("End task");
- return null;
- }
- };
- }
- };
- Button btn = new Button("Start Service");
- btn.setOnAction(e -> {
- ProgressDialog dialog = new ProgressDialog(service);
- dialog.setTitle("Progress Dialog");
- dialog.setHeaderText("Header message");
- Stage stage = (Stage) dialog.getDialogPane().getScene().getWindow();
- stage.getIcons().add(new Image(this.getClass().getResource("<image>.png").toString()));
- service.start();
- });
- Scene scene = new Scene(new StackPane(btn),300,250);
- primaryStage.setScene(scene);
- primaryStage.show();
- }