2013-02-23 12 views
24

this codeを見ると、ログイン後に新しいウィンドウを表示する方法が表示されます。ユーザー名とパスワードが正しい場合、新しいダイアログが開きます。ユーザー名とパスワードを確認することなく、新しいダイアログを開くためにボタンをクリックします。JavaFX open新しいウィンドウ

+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'と' hide 'はウィンドウと同じことです。 [この回答](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); 
    } 
}); 
関連する問題