2013-02-23 7 views
24

Глядя на this code, они показывают способ отображения нового окна после входа в систему. Когда имя пользователя и пароль верны, он открывает новый диалог. Я хочу кнопку, чтобы открыть новый диалог, не проверяя имя пользователя и пароль.JavaFX открыть новое окно

+8

Важно, чтобы вы нашли время, чтобы изучить этот материал. Я хочу использовать JavaFX в любом случае, я бы предложил пройти несколько учебников. Я бы порекомендовал [этот] (http://docs.oracle.com/javafx/2/get_started/jfxpub-get_started.htm) – blo0p3r

ответ

55

Если вы просто хотите кнопку, чтобы открыть новое окно, а затем что-то вроде это работает:

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

Есть ли способ «удалить» существующее окно, а не скрывать его? – will

+0

@will 'close'ing и' hide'ing window - это то же самое. [этот ответ] (http://stackoverflow.com/a/10217157/686036) хорошо объясняет эту концепцию. – blo0p3r

+0

Я имею ввиду, что он удаляет экземпляр. У меня есть длинное приложение (недели), и мне не нужны никакие ресурсы, собранные для сбора мусора. – will

8

Я использую следующий метод в своих приложениях 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); 
    } 
}); 
Смежные вопросы