it-swarm.com.de

Wie stellen Sie das Symbol eines Dialog-Steuerelements Java FX/Java 8 ein?

Ich vermisse vielleicht etwas sehr offensichtliches, aber ich kann nicht herausfinden, wie man das Symbol für eine Dialogkomponente setzt (genauer gesagt, ProgressDialog). Ich weiß, wie man das für eine Bühne macht, this.primaryStage.getIcons().add(new Image(getClass().getResourceAsStream("/icon/Logo.png")));, aber ich finde nichts für die Dialog-Familie. Und irgendwie hat das Einstellen des Bühnenbildes keinen Einfluss auf das Dialogsymbol.

Vielen Dank

14
BlackLabrador

Es gibt ein ausgezeichnetes Tutorial here von Marco Jakob, in dem Sie nicht nur finden, wie Sie Dialoge verwenden, sondern auch, wie Sie Ihr Problem lösen.

Sowohl für die neuen Dialoge (in früheren Versionen von JDK8u40 oder mit openjfx-dialogs mit JDK 8u25) als auch für diejenigen in ControlsFX , um das Symbol Ihres Dialogs zu setzen, können Sie diese verwenden. Lösung :

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

Dieser Codeausschnitt zeigt, wie eine ProgressDialog aus ControlsFX verwendet und ein Symbol für das Dialogfeld festgelegt wird:

@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

Mach einfach so:

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();

Hier ist das Ergebnis

 enter image description here

** Meine Freunde, machen wir Informatik? : Nein, wir basteln **

7
Envy Hion

Dies ist eine Methode, die ich in meine JavaFX-Projekte einbinde. Ich rufe diese Methode einfach auf und übergebe Alert als Parameter, um sowohl das Titelleistensymbol als auch die Kopfgrafik festzulegen. 

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);                       
    }
}

In jeder Klasse, in der ich den Alert verwenden möchte, werden bereits das benutzerdefinierte Symbol und die Kopfgrafik angezeigt.

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

Sie können das Symbol Ihrer Anwendung leicht für das Warnungssymbol verwenden, indem Sie Ihr Anwendungsfenster als Besitzer des Warnungsfelds festlegen:

@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