2013-02-23 34 views
24

this code görüntülendiğinde, giriş yaptıktan sonra yeni bir pencereyi görüntülemenin bir yolunu gösterirler. Kullanıcı adı ve şifre doğru olduğunda yeni iletişim kutusu açılır. Kullanıcı adı ve şifreyi kontrol etmeden yeni bir diyalog açmak için düğmeyi tıklatmak istiyorum. Eğer sadece bir düğmeye yeni bir pencere açmak istiyorsanızJavaFX open new window

+8

Bu tür şeyleri öğrenmek için zaman ayırmanız önemlidir. JavaFX'i herhangi bir şekilde kullanmak istiyorsunuz, birkaç öğreticiden geçmenizi öneririm. [Bu bir tane tavsiye ederim] (http://docs.oracle.com/javafx/2/get_started/jfxpub-get_started.htm) – blo0p3r

cevap

55

, böyle sonra bir şey çalışır:

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

Mevcut pencereyi gizlemek yerine 'bırakma' için bir yol var mı? – will

+0

@will 'close'ing ve' hide'ing bir pencere aynı şeydir. [Bu cevap] (http://stackoverflow.com/a/10217157/686036) bu kavramı açıklamakta iyidir. – blo0p3r

+0

Örneği olduğu gibi silmeyi bırakın. Uzun süren bir uygulamam var (haftalar) ve tiftik toplamak için toplanan çöplere ihtiyacım yok. – will

8

benim JavaFX uygulamalarında aşağıdaki yöntemi kullanın.

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