2013-02-23 120 views
24

Nhìn vào this code chúng hiển thị một cách để hiển thị cửa sổ mới sau khi đăng nhập. Khi tên người dùng và mật khẩu chính xác, nó sẽ mở hộp thoại mới. Tôi muốn có một nút bấm để mở hộp thoại mới, mà không cần kiểm tra tên người dùng và mật khẩu.JavaFX mở cửa sổ mới

+8

Điều quan trọng là bạn dành thời gian để tìm hiểu loại nội dung này. Tôi đang tìm cách sử dụng JavaFX trong bất kỳ cách nào, tôi sẽ đề nghị đi qua một vài hướng dẫn. Tôi muốn giới thiệu [this one] (http://docs.oracle.com/javafx/2/get_started/jfxpub-get_started.htm) – blo0p3r

Trả lời

55

Nếu bạn chỉ muốn có một nút để mở ra một cửa sổ mới, sau đó một cái gì đó như thế này hoạt động:

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ó cách nào để 'thả' cửa sổ hiện tại thay vì ẩn không? – will

+0

@will 'close'ing và' hide'ing một cửa sổ cũng giống như vậy. [câu trả lời] (http://stackoverflow.com/a/10217157/686036) là giải thích tốt khái niệm này. – blo0p3r

+0

Tôi có nghĩa là thả nó như trong xóa dụ. Tôi có một ứng dụng chạy dài (tuần) và tôi không cần bất kỳ tài nguyên không có rác nào được thu thập để thu thập lint. – will

8

tôi sử dụng phương pháp sau đây trong các ứng dụng JavaFX của tôi.

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); 
    } 
}); 
Các vấn đề liên quan