如何在JavaFX中创建对话框

时间:2013-04-18 10:55:11

标签: java javafx-2 javafx

我测试了在JavaFX中创建简单的对话框但由于某种原因代码无效:

MenuBar menuBar = new MenuBar();

        // File menu - new, save, exit
        Menu menu = new Menu("File");
        menu.getItems().add(new MenuItem("New"));
        menu.getItems().add(new MenuItem("Save"));
        menu.getItems().add(new SeparatorMenuItem());

        menuBar.getMenus().add(menu);

        // Options menu - Preferences
        Menu options = new Menu("Options");
        options.getItems().add(new MenuItem("Preferences"));

        menuBar.getMenus().add(options);

        // Help menu - About
        Menu help = new Menu("Help");
        MenuItem about = new MenuItem("Exit");


        about.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent e) {
                Stage dialogStage = new Stage();
                dialogStage.initModality(Modality.WINDOW_MODAL);
                dialogStage.setScene(new Scene(VBoxBuilder.create().
                        children(new Text("Hi"), new Button("Ok.")).
                        alignment(Pos.CENTER).padding(new Insets(5)).build()));
                dialogStage.show();
            }
        });

        menuBar.getMenus().add(help);

        menuBar.prefWidthProperty().bind(primaryStage.widthProperty());

        root.getChildren().add(menuBar);
        primaryStage.setScene(scene);
        primaryStage.show();

我想点击About菜单项以显示包含作者信息的简单对话窗口。你能告诉我如何纠正我的错误吗?

3 个答案:

答案 0 :(得分:2)

我使用http://sourceforge.jp/projects/jfxmessagebox/wiki/JfxMessageBox作为我的留言箱。我希望这会有所帮助。

答案 1 :(得分:2)

您可以尝试我的自定义对话框。访问FXDialog公共存储库。

答案 2 :(得分:1)

我也在寻找FX对话功能几天。在我尝试编写自己的复杂对话框之前,我遇到了“救世主”ControlsFX [here](http://fxexperience.com/)。它对我来说就像一个奇迹。但是,您必须升级到JDK8才能完全体验ControlFX在FX8上的奇迹。我相信每个人迟早都会使用JDK8。

幸运的是,我的原始代码在我变得太复杂而无法进行这样的转换之前没有走得太远。 :)

希望这篇文章也能提供5千个JAVAer。使用以下示例代码查看其工作原理:

    Action response = Dialogs.create()
        .owner( null)
        .title("Confirmation")
        .masthead("Are you sure to delete UserLevel: '"+ul.getLevelname()+"' ?")
        .message(entry)
        .showConfirm();

    System.out.println("response: " + response);        


    if (response.toString().equals("YES")){
        if(!Main.db.em.getTransaction().isActive())
            Main.db.em.getTransaction().begin();

        Main.db.em.remove(ul);
        Main.db.em.getTransaction().commit();
        tbvMain.getItems().remove(tbvMain.getSelectionModel().getSelectedIndex());
    }