如何在 Javafx 中对齐对话框窗格的“确定”按钮?

2024-04-28

我想对齐(即位置中心)对话框窗格的“确定”按钮。我已经尝试过下面的代码,但它不起作用。

Dialog dialog = new Dialog();
DialogPane dialogPane = dialog.getDialogPane();
dialogPane.setStyle("-fx-background-color: #fff;");

        // Set the button types.
ButtonType okButtonType = new ButtonType("Ok", ButtonBar.ButtonData.OK_DONE);
ButtonType cancelButtonType = new ButtonType("Cancel", ButtonBar.ButtonData.CANCEL_CLOSE);
dialog.getDialogPane().getButtonTypes().addAll(okButtonType, cancelButtonType);
dialogPane.lookupButton(cancelButtonType).setVisible(false);

        // Testing
Button okButton = (Button) dialog.getDialogPane().lookupButton(okButtonType);
okButton.setAlignment(Pos.CENTER);
        // End Testing

dialog.showAndWait();

实际上,以非 hacky 的方式实现对话框 ButtonBar 中的按钮居中实际上非常困难。

以下是我能想到的最佳解决方案。它依赖于一个动态 CSS 查找 https://docs.oracle.com/javase/8/javafx/api/javafx/scene/Node.html#lookup-java.lang.String-按钮容器的 HBox 的,然后在右侧添加一个间隔区域以将按钮推到左侧(默认的 ButtonSkin 实现已经放置了左侧的隐式间隔,它将按钮推到右侧,我确定使用优美的风景 http://fxexperience.com/scenic-view/)。左右垫片的组合最终将按钮对齐在中心。该解决方案还覆盖 ButtonBar 创建,以停止 ButtonSkin 内部重新排序和执行额外的按钮布局,因为当它这样做时,您无法真正可靠地自己自定义布局。

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;

import java.util.Optional;

public class CenteredDialogButtons extends Application {
    @Override
    public void start(Stage stage) {
        Button show = new Button("Show Dialog");

        Dialog<ButtonType> dialog = new Dialog<>();
        DialogPane dialogPane = new DialogPane() {
            @Override
            protected Node createButtonBar() {
                ButtonBar buttonBar = (ButtonBar) super.createButtonBar();
                buttonBar.setButtonOrder(ButtonBar.BUTTON_ORDER_NONE);

                return buttonBar;
            }
        };
        dialog.setDialogPane(dialogPane);
        dialogPane.getButtonTypes().addAll(ButtonType.OK);
        dialogPane.setContentText("Centered Button");

        Region spacer = new Region();
        ButtonBar.setButtonData(spacer, ButtonBar.ButtonData.BIG_GAP);
        HBox.setHgrow(spacer, Priority.ALWAYS);
        dialogPane.applyCss();
        HBox hbox = (HBox) dialogPane.lookup(".container");
        hbox.getChildren().add(spacer);

        show.setOnAction(e -> {
            Optional<ButtonType> result = dialog.showAndWait();
            if (result.isPresent() && result.get() == ButtonType.OK) {
                System.out.println("OK");
            }
        });

        StackPane layout = new StackPane(
                show
        );
        layout.setPadding(new Insets(50));

        Scene scene = new Scene(layout);

        stage.setScene(scene);
        stage.show();
    }

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

我不太喜欢这个解决方案的原因是动态 CSS 查找有点违反 API 封装,因为按钮栏等控件的 JavaFX 场景图的 CSS 结构并不是其公共 API 的真正一部分。但是,我认为使用 JavaFX 8 的现有公共 API 和默认 ButtonBar 皮肤确实不可能在 ButtonBar 中获得居中按钮。

另一种方法是为与对话框关联的 ButtonBar 创建自定义外观,但该方法非常困难,我不建议将其用于此任务。

基本上,所有这一切的要点是,尽可能保留默认的按钮布局和对话框顺序,而不是尝试自定义对话框按钮布局。如果您确实希望在按钮放置等级别上拥有完全自定义的布局,那么您最好通过子类化 Stage 来创建自己的自定义对话框类,而不是基于内置对话框类实现自定义对话框。

相关但略有不同的信息位于:

  • 输入键事件在 Javafx 对话框中不起作用? https://stackoverflow.com/questions/35458089/enter-key-event-is-not-working-on-dialog-in-javafx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Javafx 中对齐对话框窗格的“确定”按钮? 的相关文章

  • 如何更改对话框的默认黑色暗淡背景“颜色”(而不是暗淡量)?

    这是随机显示的图像Dialog在网上找到的 我一直在实施一个自定义Dialog 我可以处理对话框上的几乎所有内容 除了对话框本身下方的默认黑色昏暗背景之外 但在其后面的整个屏幕上 基本上我想改变它color和阿尔法值 我一直在 StackO
  • 即使在轴上进行自动量程调整,我也可以保留积分刻度线吗?

    我 偷 了一些代码here http fxexperience com 2012 01 curve fitting and styling areachart 拥有一个AreaChart我在 FXML 中使用了 平滑线条 它的工作原理如下
  • JavaFX使节点覆盖父节点边框颜色

    我有一个如下所示的节点 仅使用 css 我希望标签覆盖其父边框颜色 因此标签下方的边框颜色部分变得不可见 我用来制作这个边框的CSS代码 fx border color black fx border width 3 fx border r
  • 如何使用 MVVM 打开和关闭新 Windows?

    对于 MVVM 和 WPF 什么是处理打开和关闭新窗口和对话框的好 直接方法 打开和关闭应该由 ViewModel 驱动 对吗 但 ViewModel 不应该知道视图 我通常为此使用接口 例如 如果我想在单独的窗口中编辑记录 我有一个接口
  • Angular 模态对话框最佳实践

    与不具有动态内容的对话框相比 创建具有动态内容的模式对话框的最佳实践是什么 例如 我们有一些模式表单接受表单元素列表 并具有提交 取消功能 此外 还有一些模式对话框仅显示确认 确定类型的操作 我见过很多人说对话框应该是传递到控制器的服务 但
  • Android:使 Dialog 周围的所有内容都比默认值更暗

    我有一个具有以下样式的自定义对话框 它显示了一个无边框对话框 后面的任何内容都会 稍微 变暗 我的设计师希望背后的一切都比 Android 的默认设置更暗 但不是完全黑色 有这样的设置吗 我能想到的唯一解决方法是使用全屏活动而不是对话框 只
  • Primefaces 对话框渲染两次

    我创建了一个 ui component 来像弹出窗口一样使用 因此我可以使用此模板的标准创建很多弹出窗口 该组件只是一个带有两个按钮 取消和提交 的弹出窗口和一个可以覆盖的内容 如下所示
  • 将图像添加到自定义 AlertDialog

    我制作了一个 AlertDialog 让用户可以从我显示的 4 个选项中选择一个 前 3 个让他们在单击号码时直接拨打号码 第 4 个显示不同的视图 现在看起来是这样的 由于第四个选项的目的是不同的任务 我想让它看起来不同 因为用户可能会感
  • 如何加载图像文件到ImageView?

    我试图在从文件选择器中选择图像文件后立即显示该图像文件 文件选择器仅限于 png 和 jpg 文件 所选文件存储在文件类型的变量中 为此 我设置了一个 ImageView 我希望用这个新文件设置图像 唯一的问题是它的类型是文件而不是图像 如
  • Hibernate + SQLite 不创建数据库

    这是我的问题 我有一个使用 JavaFX Hibernate SQLite 的桌面应用程序 这是我的模型 Entity Table name usuario public class Usuario implements AbstractM
  • 在 Android 应用程序中启动应用程序时仅显示一次版本信息

    我想显示一个带有 确定 按钮的简单信息对话框 介绍此版本中的新增内容 但它应该仅在第一次启动时显示 实施这个的最好方法是什么 我会 并且已经 使用带有布尔值或 int 值的 SharedPreferences 只需检查最后一个版本是否比当前
  • Java FX 8 - Tableview 显示对象内的对象

    我正在尝试加载一个表格视图来自对象列表的组件 在我的例子中是客户端对象 一个客户端对象包含一个Address对象和反之亦然 这Client和Address对象定义如下 public class Client private String f
  • Gluon 移动 iOS 音频播放器

    由于 JavaFx Media 尚未移植到移动平台 任何人都可以帮助我使用本机 iOS APi 来播放声音 mp3 文件 该文件将存储在我的 gluon 项目的 main resources 文件夹中 在 Android 上 我们可以轻松地
  • 如何使自定义对话框透明?

    我需要使我的自定义对话框透明 我怎样才能做到这一点 您还可以在构造函数中使用以下行 getWindow setBackgroundDrawable new ColorDrawable 0
  • 如何从表列javafx中删除行

    这些是我的表格列 Course and 描述 如果单击一行 该行变为 活动 突出显示 并且他们按下Delete按钮它应该删除该行 我该怎么做 我的代码Course列 以及我要添加什么事件侦听器到我的delete按钮 SuppressWarn
  • JavaFX 中的 MVC 模式与场景生成器

    我是 JavaFX 新手 根据我当前的设置 正在努力创建合适的 MVC 架构 我使用 Scene Builder 单击了一个 UI 并指定了一个 Controller 类 Startup public class Portal extend
  • 更改 Angular 对话框的背景颜色

    我正在尝试更改对话框背景 无需触摸style css file 正如其他一些答案所说 有很多方法可以设置对话框样式 1 此解决方案适用于宽度和高度 但透明背景被 忽略 this dialog open DialogComponent dis
  • mobileapplication.mobileevent BACK_BUTTON_PRESSED

    我的两个视图中有 2 个 Android 本机音频实例 当用户按下后退按钮并离开视图时 我试图让音频停止 因为它不会自动发生 我查看了文档并看到了 MobileEvent 类 我尝试实现它的构造函数 但没有成功 这是我的第一个应用程序 为此
  • 如何使用 Watin IE 处理 Windows 安全警报对话框

    我正在尝试使用 WatIN IE 实现网站自动化 由于该网站在几次请求后禁止该IP 因此 当IP被禁止时 我设置一个bool ipbanned true 在这种情况下 我想更改IP SetProxy 方法成功更改了 IP 地址和端口 但在下
  • JavaFX 2.0 FXML 子窗口

    经过多次搜索我发现了这个问题如何创建 javafx 2 0 应用程序 MDI https stackoverflow com questions 10915388 how to create a javafx 2 0 application

随机推荐

  • 并发.futures问题:为什么只有1个worker?

    我正在尝试使用concurrent futures ProcessPoolExecutor并行化串行任务 串行任务涉及从数字范围中查找给定数字的出现次数 我的代码如下所示 在执行过程中 我从任务管理器 系统监视器 顶部注意到 尽管给定了 m
  • Apple Mach-O 链接器警告“未找到选项目录...”

    我只是想摆脱像这样弹出的警告 ld warning directory not found for option F Users m Desktop FacebookSDK ld warning directory not found fo
  • System.Console 作为带有输入行的日志窗口

    我正在编写一个控制台应用程序 在文本滚动时需要用户在底行输入 这个想法是让文本滚动并在底部留下输入行 我想要文本编辑功能 箭头键 插入 删除等 我也希望能够拥有静态 状态行 不受滚动影响的行 A real world example wou
  • R:使用 dplyr 对列序列按行求和

    本着类似问题的精神here https stackoverflow com questions 28873057 sum across multiple columns with dplyr and here https stackover
  • 将文件拖放到 Microsoft Access 中

    我在 Microsoft Access 中有一个表单 允许用户将附件上传到每条记录 我想通过让用户将文件拖放到附件字段中来使其更加用户友好 执行此操作的最佳方法是什么 我该如何执行此操作 以下是拖放 附加 文件以便与 MS Access 一
  • 删除并添加回元素后,JQuery 单击功能不起作用

    这是我的点击功能 cal table tbody td on click function if this hasClass available alert asd 我遇到的问题是 在切换到下个月或上个月后 我在日历上的点击功能不起作用 例
  • 使用 FosUserBundle 分配角色

    我对 Symfony 真的很陌生 我正在尝试使用 FosUserBundle 向用户注册角色 但我无法管理如何做到这一点 实际上 我还集成了 PUGXMultiUserBundle 以便为两个不同的角色提供两种不同的形式 谁能帮我 提前致谢
  • MATLAB 引擎函数的输入参数

    我正在尝试使用 MATLAB 引擎在 Python 中调用 MATLAB 函数 但遇到一些问题 在设法将 NumPy 数组作为函数的输入处理后 现在 MATLAB 出现一些错误 MatlabExecutionError 未定义输入函数 si
  • 相机表面视图图像看起来被拉伸

    在纵向模式下 图像看起来垂直拉伸 在横向模式下 图像看起来水平拉伸 虽然捕获图像后以适当的尺寸显示 如何解决这个问题 您需要选择与您的显示尺寸相匹配的预览尺寸 我建议更改预览尺寸设置以匹配您的SurfaceView而不是相反 虽然预览数据很
  • SQL Server:多行的 SUM() 包括 where 子句

    我有一张如下所示的表 PropertyID Amount Type EndDate 1 100 RENT null 1 50 WATER null 1 60 ELEC null 1 10 OTHER null 2 70 RENT
  • Cakephp 验证后,所有表单字段都为空,并出现表单错误

    我有问题 我尝试填写表单 然后单击提交按钮 然后它显示表单错误 但所有文本框字段都变为空白 并且可以显示表单错误 我希望它变得与验证之前相同的值 就像我不想在验证后清除 清空值一样 我做了这样的事情 在视图中 div class regfo
  • Spark流吞吐量监控

    有没有办法监控 Spark 集群的输入和输出吞吐量 以确保集群不会被传入数据淹没和溢出 就我而言 我在 AWS EC2 上设置了 Spark 集群 所以我正在考虑使用AWS 云观察来监控网络输入 and 网络输出对于集群中的每个节点 但我的
  • 我无法使用 LWP::UserAgent 连接到任何 HTTPS 站点

    我正在尝试创建一个仅连接到网站的脚本 但是 由于某种原因 它不会连接到使用 HTTPS 的任何内容 我们在这里启用了代理 但是 我相信代理不是问题 因为如果我要连接到网络内部不通过代理建立隧道的 HTTPS 它仍然会失败 如果我要在任何不使
  • 删除多个对象 Amazon s3 PHP SDK

    我在一次删除多个对象时遇到问题 使用这个库 https github com aws aws sdk php laravel https github com aws aws sdk php laravel 我对使用该库的其他任何事情都没有
  • 无法对非静态方法进行静态引用

    使用 Java 构建多语言应用程序 插入字符串值时出现错误R string资源 XML 文件 public static final String TTT String getText R string TTT 这是错误消息 错误 无法从类
  • 绝对定位的最小高度

    我的页面 topLeft 上有一个区域设置了最小高度 在 topLeft 中 我有一个 heroBanners 部分 我希望将其锚定到 topLeft 的底部 使用position absolute 底部 0 起初 这工作正常 但是当 to
  • SQL SERVER 中是否有与 MS Access 的 VAL() 函数等效的函数?

    我在直接在 sql server 中运行代码 Access Query 时遇到问题 其中包含VAL CoLUMN NAME 经过大量谷歌搜索后 我发现了一个CAST COLUMN AS DATATYPE 取代VAL 但是当该列是文本类型并且
  • 如果不使用静态成员,静态成员变量是否在模板类中初始化?

    如果不使用静态成员 静态成员变量是否在模板类中初始化 我用它来注册类型 template
  • 如何在 Postgres 中的 JSON 字段上创建索引?

    在 PostgreSQL 9 3 Beta 2 中 如何在 JSON 字段上创建索引 我尝试使用 gt 运算符用于hstore但出现以下错误 CREATE TABLE publishers id INT info JSON CREATE I
  • 如何在 Javafx 中对齐对话框窗格的“确定”按钮?

    我想对齐 即位置中心 对话框窗格的 确定 按钮 我已经尝试过下面的代码 但它不起作用 Dialog dialog new Dialog DialogPane dialogPane dialog getDialogPane dialogPan