如何在javafx中创建一个弹出窗口[重复]

Posted

技术标签:

【中文标题】如何在javafx中创建一个弹出窗口[重复]【英文标题】:How to create a popup window in javafx [duplicate] 【发布时间】:2014-04-05 16:08:39 【问题描述】:

我想在 JavaFX 应用程序中创建一个弹出窗口。给我一些想法。

当我点击 Check 按钮时,它会打开弹出窗口。 怎么做?

【问题讨论】:

抱歉,我无法在评论中使用换行符来格式化这段代码 - 但你去吧。这将创建一个新窗口:BorderPane borderPane = new BorderPane(); Scene scene = new Scene(borderPane, 600, 600); Stage stage = new Stage(); stage.setScene(scene); stage.setTitle("Cool Window"); stage.show(); 【参考方案1】:

您可以创建一个新的Stage,将您的控件添加到其中,或者如果您需要将弹出窗口设置为Dialog 框,那么您可以考虑使用DialogsFX 或ControlsFX(需要JavaFX8)

要创建一个新的Stage,可以使用下面的sn-p

@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);

【讨论】:

我需要导入什么才能让它工作?【参考方案2】:

Popup 类可能比 Stage 类更好,这取决于您想要什么。 Stage 要么是模态的(您不能单击应用程序中的任何其他内容),要么如果您单击应用程序中的其他位置,它就会消失(因为它是一个单独的窗口)。弹出窗口保持在顶部,但不是模态的。

请参阅此 Popup Window 示例。

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

你看过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 或更高版本。

【讨论】:

以上是关于如何在javafx中创建一个弹出窗口[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 vue 中创建模态弹出窗口

如何在 Python 函数中创建简单的 PyQt 弹出窗口并在其末尾关闭?

如何在 Shiny 中创建一个弹出窗口来警告用户选择一种类型的文件扩展名?

如何在剑道中创建没有弹出窗口的事件?还是以编程方式创建事件?

javascript--自定义弹出登陆窗口(弹出窗)

交互式地图,如何在 symfony 中创建从地图标记的弹出窗口到模板的链接