【问题标题】:JavaFX open new windowJavaFX 打开新窗口
【发布时间】:2013-02-09 02:36:24
【问题描述】:

查看this code,他们展示了一种在登录后显示新窗口的方法。当用户名和密码正确时,它会打开新对话框。我想要一个按钮点击打开新对话框,而不检查用户名和密码。

【问题讨论】:

  • 花时间学习这些东西很重要。如果您希望以任何方式使用 JavaFX,我建议您阅读一些教程。我会推荐this one
  • 链接失效

标签: javafx-2


【解决方案1】:

如果你只是想要一个按钮来打开一个新窗口,那么这样的工作:

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

【讨论】:

  • 有没有办法“删除”现有窗口而不是隐藏它?
  • @will closeing 和 hideing 一个窗口是一回事。 this answer 擅长解释这个概念。
  • 我的意思是删除它作为删除实例。我有一个长时间运行的应用程序(几周),我不需要收集任何非垃圾资源来收集棉绒。
  • 就是这样。 hideing 或closeing 将删除它。只需删除对这个窗口/舞台的任何引用(就像你对任何其他 java 对象所做的那样)。
  • @Line 在这个例子中不是真的。但是假设您想在 try 块之外使用 root 做其他事情,那么它会很有用。
【解决方案2】:

我在我的 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);
    }
});

【讨论】:

    【解决方案3】:

    下面的代码对我有用,我在按钮类中使用了上面的部分代码。

    public Button signupB;
    
    public void handleButtonClick (){
    
        try {
            FXMLLoader fxmlLoader = new FXMLLoader();
            fxmlLoader.setLocation(getClass().getResource("sceneNotAvailable.fxml"));
            /*
             * if "fx:controller" is not set in fxml
             * fxmlLoader.setController(NewWindowController);
             */
            Scene scene = new Scene(fxmlLoader.load(), 630, 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);
        }
    
    }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2017-08-26
      • 1970-01-01
      • 1970-01-01
      • 2015-07-15
      • 2015-07-16
      • 2014-10-19
      • 1970-01-01
      • 1970-01-01
      • 2014-03-24
      相关资源
      最近更新 更多