如何在javafx中创建弹出窗口

时间:2014-03-04 08:30:05

标签: java javafx javafx-2 javafx-8 scenebuilder

我想在javafx应用程序中创建一个弹出窗口。请给我一些想法 enter image description here

当我点击复选按钮打开弹出窗口时。 怎么办?

4 个答案:

答案 0 :(得分:34)

您可以创建新的Stage,将控件添加到其中,或者如果您需要将POPUP作为Dialog框,则可以考虑使用DialogsFXControlsFX (需要JavaFX8)

要创建新舞台,您可以使用以下代码段

@Override
public void start(final Stage primaryStage) {
    Button btn = new Button();
    btn.setText("Open Dialog");
    btn.setOnAction(
        new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                final Stage dialog = new Stage();
                dialog.initModality(Modality.APPLICATION_MODAL);
                dialog.initOwner(primaryStage);
                VBox dialogVbox = new VBox(20);
                dialogVbox.getChildren().add(new Text("This is a Dialog"));
                Scene dialogScene = new Scene(dialogVbox, 300, 200);
                dialog.setScene(dialogScene);
                dialog.show();
            }
         });
    }

如果您不希望它为modal(阻止其他窗口),请使用:

dialog.initModality(Modality.NONE);

答案 1 :(得分:5)

Popup类可能比Stage类更好,具体取决于您的需求。舞台可以是模态的(您可以点击应用中的任何其他内容),如果您点击应用中的其他位置(因为它是一个单独的窗口),它就会消失。弹出窗口保持在顶部,但不是模态的。

请参阅此Popup Window示例。

答案 2 :(得分:0)

你有没有看过ControlsFx Popover control


import org.controlsfx.control.PopOver;
import org.controlsfx.control.PopOver.ArrowLocation;

private PopOver item;

final Scene scene = addItemButton.getScene();

final Point2D windowCoord = new Point2D(scene.getWindow()
        .getX(), scene.getWindow().getY());

final Point2D sceneCoord = new Point2D(scene.getX(), scene.
                getY());

final Point2D nodeCoord = addItemButton.localToScene(0.0,
                        0.0);
final double clickX = Math.round(windowCoord.getX()
    + sceneCoord.getY() + nodeCoord.getX());

final double clickY = Math.round(windowCoord.getY()
        + sceneCoord.getY() + nodeCoord.getY());
item.setContentNode(addItemScreen);
item.setArrowLocation(ArrowLocation.BOTTOM_LEFT);
item.setCornerRadius(4);                            
item.setDetachedTitle("Add New Item");
item.show(addItemButton.getParent(), clickX, clickY);

这只是一个例子,但PopOver听起来像是可以完成你想要的。查看documentation了解详情。

重要提示:ControlsFX仅适用于JavaFX 8.0 b118或更高版本。

答案 3 :(得分:0)

如果您正在寻找非常简单的对话框弹出窗口,请查看jfxmessagebox(http://en.sourceforge.jp/projects/jfxmessagebox/)。