2017-04-19 4 views
2

Wie kann ich das Programmsymbol so einstellen, dass es ohne Verwendung von alert.initOwner() alarmiert? Warum ohne initOwner? Das liegt daran, dass eine Warnung angezeigt werden muss, bevor das ganze Fenster initialisiert wird. Es gibt also keine Szene, die ich in die Funktion initOwner einfügen kann.JavaFX 8 Wie programmiere ich das Programm?

Antwort

2

Sie können die DialogPane aus einer Alert-Instanz stehlen und sie zu einer normalen Stage hinzufügen. Ein Knoten kann nur sein, die Wurzel einer Szene zu einer Zeit, so müssen Sie die Wurzel der Warnung der Szene ersetzen zuerst:

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

Schön! Das war etwas, wonach ich gesucht habe, danke: D –

2
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(); 
} 
} 
0

Dies ist, wie es gemacht wird:

// 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")); 

Möglicherweise liegt ein Problem mit der obigen Bildreferenz vor. Aber Sie können versuchen, so lange zu konfigurieren, wie es funktioniert. So mache ich (ich benutze Maven). Ihr könnt anders sein, wenn Sie nicht Maven verwenden.

Vollständige Anleitung hier: Alert javafx tutorial

Verwandte Themen