2013-02-23 21 views
24

Guardando a this code mostra un modo per visualizzare una nuova finestra dopo un accesso. Quando username e password sono corretti apre una nuova finestra di dialogo. Voglio un clic per aprire una nuova finestra di dialogo, senza verificare nome utente e password.JavaFX apre una nuova finestra

+8

È importante che tu abbia il tempo di imparare questo tipo di cose. Se stai cercando di utilizzare JavaFX in qualsiasi modo, ti suggerirei di passare attraverso alcuni tutorial. Vorrei raccomandare [questo] (http://docs.oracle.com/javafx/2/get_started/jfxpub-get_started.htm) – blo0p3r

risposta

55

Se si desidera solo un pulsante per aprire una nuova finestra, quindi qualcosa come questo funziona:

btnOpenNewWindow.setOnAction(new EventHandler<ActionEvent>() { 
    public void handle(ActionEvent event) { 
     Parent root; 
     try { 
      root = FXMLLoader.load(getClass().getClassLoader().getResource("path/to/other/view.fxml"), resources); 
      Stage stage = new Stage(); 
      stage.setTitle("My New Stage Title"); 
      stage.setScene(new Scene(root, 450, 450)); 
      stage.show(); 
      // Hide this current window (if this is what you want) 
      ((Node)(event.getSource())).getScene().getWindow().hide(); 
     } 
     catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+1

C'è un modo per "rilasciare" la finestra esistente invece di nasconderla? – will

+0

@will 'close'ing e' hide'ing una finestra è la stessa cosa. [questa risposta] (http://stackoverflow.com/a/10217157/686036) è in grado di spiegare questo concetto. – blo0p3r

+0

Voglio dire rimuoverlo as-in cancellare l'istanza. Ho un'app da molto tempo (settimane) e non ho bisogno di risorse che non sono state raccolte per raccogliere filati. – will

8

Io uso il seguente metodo nelle mie applicazioni JavaFX.

newWindowButton.setOnMouseClicked((event) -> { 
    try { 
     FXMLLoader fxmlLoader = new FXMLLoader(); 
     fxmlLoader.setLocation(getClass().getResource("NewWindow.fxml")); 
     /* 
     * if "fx:controller" is not set in fxml 
     * fxmlLoader.setController(NewWindowController); 
     */ 
     Scene scene = new Scene(fxmlLoader.load(), 600, 400); 
     Stage stage = new Stage(); 
     stage.setTitle("New Window"); 
     stage.setScene(scene); 
     stage.show(); 
    } catch (IOException e) { 
     Logger logger = Logger.getLogger(getClass().getName()); 
     logger.log(Level.SEVERE, "Failed to create new Window.", e); 
    } 
}); 
Problemi correlati