当前位置: 首页 > 知识库问答 >
问题:

在JavaFX中显示报警对话框时防止关闭上下文菜单

罗寒
2023-03-14

我有一个上下文菜单,它包含一个带有一些控件的CustomMenuItem。单击按钮时,会自动显示对话框和隐藏上下文菜单。问题是:我想在对话框显示时阻止关闭上下文菜单。我该如何解决这个问题呢?

我已经追踪到这件事了。当对话框打开时,将触发一个FocusUngrabEvent.Focus_Ungrab事件,该事件在PopupWindow中处理。我已经尝试在FocusUngrabEvent.Focus_Ungrab的上下文菜单中添加EventFilter和EventHandler并使用该事件,但这没有帮助。

这里有一个SSCCE演示了这个问题:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.CustomMenuItem;
import javafx.scene.control.Label;
import javafx.stage.Stage;

public class PimaryStage extends Application {

    @Override
    public void start(Stage primaryStage) {
        // The button which shows the dialog.
        Button button = new Button("Some Button");
        button.setOnAction((event)-> {
            Alert alert = new Alert(Alert.AlertType.WARNING);
            alert.setTitle("Warning");
            alert.setHeaderText(null);
            alert.setContentText("Some Text");

            alert.show();
        });

        // Custom menu item which contains the button.
        CustomMenuItem menuItem = new CustomMenuItem(button);
        menuItem.setHideOnClick(false);

        // Context menu.
        ContextMenu menu = new ContextMenu();
        menu.getItems().add(menuItem);

        // Label.
        Label label = new Label("Click here to open the context menu.");
        label.setContextMenu(menu);

        // Set the scene and show the stage.
        Scene scene  = new Scene(label, 300, 250);
        primaryStage.setScene(scene);

        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

共有1个答案

昌砚
2023-03-14

这对我很管用:

@FXML
public void autoShow() {
    contextmenu.setOnAction(new EventHandler<ActionEvent>() {
        public void handle(ActionEvent e) {
            e.consume();
        }
    });


}

将上面的方法放在您的controller类中,然后从您的controller类中的initialize方法调用它:

@Override 
public void initialize(URL location, ResourceBundle resources) {

    autoShow();

}
 类似资料:
  • 我正在使用新的JavaFX Alert类(Java1.8_40),并尝试在exibition文本中使用HTML标记,但到目前为止还没有成功。下面是我正在尝试做的一个例子。 有没有人知道这是不是真的可能,给我举个例子? 提前道谢。

  • 编辑:包括示例代码- > mainapp.Java-负责处理应用程序的Java类 controller.java-相应的控制器文件 design.FXML-通过mainapp.java加载并由controller.java控制的应用程序的FXML文件 compute.java-执行计算的另一个java类。 公共类Compute{Alert Alert; } 还有,有没有其他的解决方案可以做到这一点

  • 问题内容: 我有一个EditText用于输入的对话框。当我单击对话框上的“是”按钮时,它将验证输入,然后关闭对话框。但是,如果输入错误,我希望保留在同一对话框中。每次无论输入什么,当我单击“否”按钮时,都应自动关闭对话框。如何禁用此功能?顺便说一句,我在对话框上的按钮上使用了PositiveButton和NegativeButton。 问题答案: 编辑:这仅在API 8+上有效,如某些注释所述。

  • 在我的应用程序中,当我试图显示自定义的框时,它在android手机中运行良好。现在,当我在android选项卡上安装应用程序时,一切都很好,只有自定义框有问题。不显示。所以我想,我应该检查正常对话框,它工作正常。下面是普通对话框和警报对话框的代码。

  • 我知道这可能是一个容易修复的错误,但我没有找到它。当警报框出现并点击时,需要点击2次才能关闭它

  • 我有一个活动是使用这个主题的。对话框样式,使其成为另一活动上的浮动窗口。但是,当我在对话框窗口外(在后台活动上)单击时,对话框关闭。我怎样才能阻止这种行为?