it-swarm.com.ru

Как установить значок элемента управления Dialog Java FX/Java 8?

Возможно, мне не хватает чего-то очень очевидного, но я не могу узнать, как установить значок для компонента диалога (точнее, ProgressDialog). Я знаю, как это сделать для сцены, this.primaryStage.getIcons().add(new Image(getClass().getResourceAsStream("/icon/Logo.png")));, но я ничего не нахожу для семьи Диалог. И так или иначе, настройка значка сцены не влияет на значок диалога.

Спасибо

14
BlackLabrador

Здесь есть отличный учебник здесь Марко Якоба, где вы можете найти не только как использовать диалоги, но и как решить вашу проблему.

И для новых диалогов (в ранних версиях JDK8u40 или с openjfx-dialogs с JDK 8u25), или для тех в ControlsFX , чтобы установить значок вашего диалога, вы можете использовать это решение :

Stage stage = (Stage) dialog.getDialogPane().getScene().getWindow();
stage.getIcons().add(
    new Image(this.getClass().getResource("<image>.png").toString()));

Этот фрагмент кода показывает, как использовать ProgressDialog из ControlsFX и установить значок для диалогового окна:

@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();
}
24
José Pereda

Просто сделай так:

Alert(AlertType.ERROR, "Erreur de connexion! Verifiez vos Identifiants",FINISH); //Cancel..
setTitle("XNotes FX Erreur");
stage = (Stage) alert.getDialogPane().getScene().getWindow();
stage.getIcons().add(new Image("indiza/XnotesErrorIdz.png")); // To add an icon
showAndWait();

Вот результат

 enter image description here

** Друзья мои, мы занимаемся информатикой? : Нет, мы делаем поделки **

7
Envy Hion

Это метод, который я включаю в свои проекты JavaFX, просто вызывая этот метод и передавая Alert в качестве параметра, вы будете устанавливать как значок строки заголовка, так и изображение заголовка. 

public class Msg {

public void showInfo(String title, String header, String message) {
    Alert alertShowInfo = new Alert(Alert.AlertType.INFORMATION);
    addDialogIconTo(alertShowInfo); //add icon and header graphic
    alertShowInfo.setTitle(title);
    alertShowInfo.setHeaderText(header);
    alertShowInfo.setContentText(message);
    alertShowInfo.showAndWait();
}

//this adds images to Alert
public void addDialogIconTo(Alert alert) {
    // Add custom Image to Dialog's title bar
    final Image APPLICATION_ICON = new Image("icon.png");
    Stage dialogStage = (Stage) alert.getDialogPane().getScene().getWindow();
    dialogStage.getIcons().add(APPLICATION_ICON);

    // Add custom ImageView to Dialog's header pane.        
    final ImageView DIALOG_HEADER_ICON = new ImageView("icon.png");
    DIALOG_HEADER_ICON.setFitHeight(48); // Set size to API recommendation.
    DIALOG_HEADER_ICON.setFitWidth(48);
    alert.getDialogPane().setGraphic(DIALOG_HEADER_ICON);                       
    }
}

Затем в любом классе, в котором я хочу использовать оповещение, у него уже будет настроенный значок и изображение заголовка.

public static void main(String[] args){
        Msg msg = new Msg();

        // Alert will now include custom icon and header graphic.
        msg.showInfo("Sucess!", "Program succeeded", "Now exiting program");
} 
0
Dustin R

Вы можете легко использовать значок вашего приложения для значка оповещения, установив ваше окно приложения в качестве владельца окна оповещения:

@FXML
Button buShow;
...

Alert alert = new Alert(AlertType.INFORMATION, "Nice Box.", ButtonType.CLOSE);
alert.initOwner(buShow.getScene().getWindow());   // Alert uses the Windows Icon
alert.show();
0
Roland N P