0

我创建了这个选项卡示例,我想在显示确认对话框并单击Yes按钮后关闭它。

public static Tab testconfirmTabClose(Tab tab)
    {

        tab.setOnClosed(new EventHandler<Event>()
        {
            @Override
            public void handle(Event t)
            {
                t.consume();
                // Dialog Stage init
                final Stage dialog = new Stage();
                dialog.initModality(Modality.APPLICATION_MODAL);

                Button btnYes = new Button("Yes");

                btnYes.setOnAction(new EventHandler<ActionEvent>()
                {
                    @Override
                    public void handle(ActionEvent event)
                    {
                        dialog.close();
                    }
                });

                Button btnNo = new Button("No");

                btnNo.setOnAction(new EventHandler<ActionEvent>()
                {
                    @Override
                    public void handle(ActionEvent event)
                    {
                        dialog.close();
                    }
                });

                // Layout for the Button
                HBox hbox = new HBox();
                hbox.setSpacing(10);
                hbox.setAlignment(Pos.CENTER);
                hbox.getChildren().add(btnYes);
                hbox.getChildren().add(btnNo);

                // Layout for the Label and hBox
                VBox vbox = new VBox();
                vbox.setAlignment(Pos.CENTER);
                vbox.setSpacing(10);

                // Text
                Text tc = new Text();
                tc.setText("Do you want to quit?");

                // Layout for the Button
                HBox thbox = new HBox();
                thbox.setSpacing(10);
                thbox.setPadding(new Insets(20, 20, 20, 90));   // Place the dialog text right
                thbox.setAlignment(Pos.CENTER_LEFT);
                thbox.getChildren().add(tc);

                BorderPane bp = new BorderPane();

                bp.setPadding(new Insets(15, 15, 10, 15));
                bp.setTop(null);
                bp.setLeft(vbox);
                bp.setCenter(thbox);
                bp.setRight(null);
                bp.setBottom(hbox);

                Scene scene = new Scene(bp, 500, 140);
                dialog.setScene(scene);
                dialog.show();
            }
        });

        return tab;
    }

我有这个问题:当我单击选项卡将其关闭时,选项卡将关闭并显示确认对话框。我无法“冻结”用户响应的选项卡。你能告诉我如何解决这个问题吗?

4

1 回答 1

1

恐怕在 JavaFX 2.2 中没有干净的方法可以做到这一点。JavaFX 8 将(可能)提供一个名为的方法Tab#setOnCloseRequest(...),它可以满足您的需求。对于 2.2,我现在看到的唯一方法是从 OpenJDK 中提取源代码并创建您自己改编的 TabPane 实现 - 抱歉:-/。

于 2013-06-29T09:35:58.377 回答