2013-02-23 38 views
24

Patrząc na this code pokazują sposób wyświetlania nowego okna po zalogowaniu. Gdy nazwa użytkownika i hasło są poprawne, otwiera nowe okno dialogowe. Chcę kliknąć przycisk, aby otworzyć nowe okno dialogowe bez sprawdzania nazwy użytkownika i hasła.JavaFX otwórz nowe okno

+8

Ważne jest, aby poświęcić czas na naukę tego rodzaju rzeczy. Chciałbym użyć JavaFX w jakikolwiek sposób, sugerowałbym przejście przez kilka samouczków. Polecam [ten] (http://docs.oracle.com/javafx/2/get_started/jfxpub-get_started.htm). – blo0p3r

Odpowiedz

55

Jeśli chcesz po prostu przycisk, aby otworzyć nowe okno, a następnie coś jak to działa:

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

Czy istnieje sposób na "upuszczenie" istniejącego okna zamiast jego ukrywania? – will

+0

@ "zamknięcie" i "ukrycie okna" to to samo. [Ta odpowiedź] (http://stackoverflow.com/a/10217157/686036) jest dobra w wyjaśnianiu tej koncepcji. – blo0p3r

+0

Mam na myśli upuść go jako w usuwaniu instancji. Mam długą aplikację (tygodnie) i nie potrzebuję żadnych zasobów, które zostałyby zebrane w celu zebrania kłaczków. – will

8

używam następujące metody w mojej aplikacji 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); 
    } 
});