使 Java Swing 模态对话框的行为类似于 Mac OSX 对话框

2023-11-30

我正在编写一个小型应用程序,需要一个进度条显示在框架标题栏的中心,就像 Mac OSX 应用程序中常见的那样。我有两个问题:

1。我已经管理了定位,但我必须对父框架的标题栏高度进行硬编码。有没有一种“软”方法来获取标题栏的高度?

在对话框的构造函数中:

 Dimension dimensionParentFrame = parent.getSize();
 Dimension dimensionDialog = getSize();
 int x = parent.getX() + ((dimensionParentFrame.width - dimensionDialog.width)/2);
 setLocation(x, parent.getY() + 22);              // TODO HARD CODE WARNING TITLE HEIGHT

2。即使对话框是模态的,我仍然可以单击父框架并移动它。如何使对话框“粘”到父框架?也就是说,当移动父框架时,对话框会随之移动,就像附加的一样。

任何帮助/指示将不胜感激。

这是代码:



    import javax.swing.JFrame;
    import javax.swing.JButton;
    import java.awt.BorderLayout;
    import java.awt.EventQueue;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;


    public class ModalDialogDemoFrame extends JFrame
    {
      ModalDialogDemoFrame modalDialogDemo;
      public ModalDialogDemoFrame() 
      {
        modalDialogDemo = this;
        setBounds(100, 100, 400, 400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JButton buttonDialog = new JButton("Open Dialog");
        buttonDialog.addActionListener(new ActionListener() 
        {
          public void actionPerformed(ActionEvent arg0) 
          {
            // Create a Modal Dialog with this Frame as Parent.
            ModalDialog modalDialog = new ModalDialog(modalDialogDemo, true);
            modalDialog.setVisible(true);
          }
        });
        getContentPane().add(buttonDialog, BorderLayout.CENTER);
      }

      /**
       * @param args
       */
      public static void main(String[] args)
      {
        EventQueue.invokeLater(new Runnable()
        {
          public void run()
          {
            try
            {
              ModalDialogDemoFrame window = new ModalDialogDemoFrame();
              window.setVisible(true);
            }
            catch (Exception e)
            {
              e.printStackTrace();
            }
          }
        });
      }

    }

    import java.awt.Dimension;

    import javax.swing.JDialog;
    import javax.swing.JFrame;
    import javax.swing.JButton;
    import java.awt.BorderLayout;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;


    public class ModalDialog extends JDialog
    {
      public ModalDialog(JFrame parent, boolean modal) 
      {
        super(parent, modal);
        Dimension dimensionParentFrame = parent.getSize();
        setSize(new Dimension((parent == null) ? 300 : dimensionParentFrame.width / 2, 75));
        Dimension dimensionDialog = getSize();
        int x = parent.getX() + ((dimensionParentFrame.width - dimensionDialog.width)/2);
        setLocation(x, parent.getY() + parent.getInsets().top);
        setUndecorated(true);
        setModal(modal);
        setModalityType(ModalityType.APPLICATION_MODAL);
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);

        JButton buttonClose = new JButton("Close");
        buttonClose.addActionListener(new ActionListener() 
        {
          public void actionPerformed(ActionEvent e) 
          {
            dispose();
          }
        });
        getContentPane().add(buttonClose, BorderLayout.CENTER);
      }

    }


int titleBarHeight = frame.getInsets().top;

即使对话框是模态的,我仍然可以单击父框架并移动它。

那么你就做错了,因为这不应该发生。

发布你的SSCCE这说明了问题所在。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使 Java Swing 模态对话框的行为类似于 Mac OSX 对话框 的相关文章

  • 如果在睡眠线程上调用interrupt()会发生什么?

    我有一个线程 然后run I call sleep 如果我中断这个线程会发生什么 MyThread extends Thread public void run try sleep 1000000 catch InterruptedExce
  • 为什么 java 编译器不报告 Intellij 中多播表达式的未经检查的强制转换警告?

    为什么下面的代码没有报告 Intellij IDEA 的未经检查的警告jdk 1 8 0 121自从Supplier
  • Spring安全“记住我”cookie在第一个请求中不可用

    我无法在登录请求后检索 Spring 记住我 cookie 但它在对受保护页面的下一个请求中工作正常 谁能告诉我怎样才能立即得到它 我在登录请求中设置了记住我的 cookie 但在 Spring 重定向回原始 受保护的 url 后无法检索它
  • Java:使用 HttpURLConnection 的 HTTP PUT

    如何执行 HTTP PUT 我正在使用的类似乎认为它正在执行 PUT 但端点将其视为我执行了 GET 我做错了什么吗 URL url new URL https HttpURLConnection conn HttpURLConnectio
  • eclipse中导入项目文件夹图标

    我在 Eclipse 工作区中新导入的 Maven 项目有J and M项目文件夹顶部的图标 项目和包资源管理器 而其他导入的 Maven 项目只有一个J icon 有人可以解释其中的区别吗 该项目有J装饰器被称为 Java 项目和具有M装
  • 内存一致性 - Java 中的happens-before关系[重复]

    这个问题在这里已经有答案了 在阅读有关内存一致性错误的 Java 文档时 我发现与创建 发生 之前 关系的两个操作相关的点 当语句调用时Thread start 每个具有 与该语句发生之前的关系也有一个 与 new 执行的每个语句之间发生的
  • Java 服务器-客户端 readLine() 方法

    我有一个客户端类和一个服务器类 如果客户端向服务器发送消息 服务器会将响应发送回客户端 然后客户端将打印它收到的所有消息 例如 如果客户端向服务器发送 A 则服务器将向客户端发送响应 1111 所以我在客户端类中使用 readLine 从服
  • 无法加载或查找主类,可以在命令行中使用,但不能在 IDE 中使用[重复]

    这个问题在这里已经有答案了 在将其标记为重复之前 请先听我说完 我正在尝试使用 gradle 导入一个 java 项目 功能齐全 适用于所有其他笔记本电脑 没有问题 我的项目 100 正常运行 适用于所有其他笔记本电脑 当我的笔记本电脑被重
  • Spring Security OAuth2简单配置

    我有一个简单的项目 需要以下简单的配置 我有一个 密码 grant type 这意味着我可以提交用户名 密码 用户在登录表单中输入 并在成功时获得 access token 有了该 access token 我就可以请求 API 并获取用户
  • 逃离的正确方法是什么?使用 Oracle 12c MATCH_RECOGNIZE 时 JDBCPreparedStatement 中的字符?

    以下查询在 Oracle 12c 中是正确的 SELECT FROM dual MATCH RECOGNIZE MEASURES a dummy AS dummy PATTERN a DEFINE a AS 1 1 但它不能通过 JDBC
  • mac osx 10.8 上的初学者 python

    我正在学习编程 并且一直在使用 Ruby 和 ROR 但我觉得我更喜欢 Python 语言来学习编程 虽然我看到了 Ruby 和 Rails 的优点 但我觉得我需要一种更容易学习编程概念的语言 因此是 Python 但是 我似乎找不到适用于
  • 无法捕获 Spring Batch 的 ItemWriter 中的异常

    我正在编写一个 Spring Batch 流程来将数据集从一个系统迁移到另一个系统 在这种情况下 这就像使用RowMapper实现在传递给查询之前从查询构建对象ItemWriter The ItemWriter称为save我的 DAO 上的
  • 将图像添加到自定义 AlertDialog

    我制作了一个 AlertDialog 让用户可以从我显示的 4 个选项中选择一个 前 3 个让他们在单击号码时直接拨打号码 第 4 个显示不同的视图 现在看起来是这样的 由于第四个选项的目的是不同的任务 我想让它看起来不同 因为用户可能会感
  • 如何在 Quartz 调度程序中每 25 秒运行一次?

    我正在使用 Java 的 Quartz Scheduling API 你能帮我使用 cron 表达式每 25 秒运行一次吗 这只是一个延迟 它不必总是从第 0 秒开始 例如 序列如下 0 00 0 25 0 50 1 15 1 40 2 0
  • Java:拆箱整数时出现空指针异常?

    此代码导致空指针异常 我不知道为什么 private void setSiblings PhylogenyTree node Color color throws InvalidCellNumberException PhylogenyTr
  • 哪个集合更适合存储多维数组中的数据?

    我有一个multi dimensional array of string 我愿意将其转换为某种集合类型 以便我可以根据自己的意愿添加 删除和插入元素 在数组中 我无法删除特定位置的元素 我需要这样的集合 我可以在其中删除特定位置的数据 也
  • JSON 到 hashmap (杰克逊)

    我想将 JSON 转换为 HashMapJackson http jackson codehaus org 这是我的 JSON String json Opleidingen name Bijz trajecten zorg en welz
  • Java的-XX:+UseMembar参数是什么

    我在各种地方 论坛等 看到这个参数 并且常见的答案是它有助于高并发服务器 尽管如此 我还是找不到 sun 的官方文档来解释它的作用 另外 它是Java 6中添加的还是Java 5中存在的 顺便说一句 许多热点虚拟机参数的好地方是这一页 ht
  • 嵌入式 Jetty - 以编程方式添加基于表单的身份验证

    有没有一种方法可以按如下方式以编程方式添加基于表单的身份验证 我用的是我自己的LdapLoginModule 最初我使用基本身份验证并且工作正常 但现在我想在登录页面上进行更多控制 例如显示徽标等 有没有好的样品 我正在使用嵌入式 jett
  • 在哪里存储 Java 的 .properties 文件?

    The Java教程 http download oracle com javase tutorial essential environment properties htmlon using Properties 讨论如何使用 Prop

随机推荐

  • 如何传递带有存储在单个变量中的引号的命令行参数?

    我想从 shell 脚本调用外部应用程序 但此 shell 脚本在单个变量中获取参数 来自其他脚本 一切都很好 直到我不必对单个参数使用双引号 而是用空格分隔单词 这是我的问题的简化示例 sh param 只是打印所有传递的参数 bin s
  • 在消息框中显示非英语文本

    我在 MS Access 中的应用程序中编写了以下代码 以波斯语 非英语 显示消息框 但是当我输入波斯语 Persion 时 它会键入一些特殊 未知 不同的字符 而且当我运行应用程序时 消息框显示特殊 不同的字符 而不是我想要显示的 msg
  • 在 boost::asio 的上下文中,术语“strand”背后的隐喻是什么?

    As a French native and a boost asio user I have added the strand word to my vocabulary is a toron in French here an imag
  • JAVA链表如何用for循环进行循环?

    您好 我正在尝试创建一个循环遍历链表的 for 循环 对于每条数据 它都会单独列出 我想在这里学习链表 所以没有数组建议 有人知道怎么做吗 示例输出 187 航班 501航班 到目前为止我的代码如下 public static Linked
  • 模拟 subprocess.Popen 依赖于导入样式

    当尝试模拟 Popen 时 只有当子进程的导入在单元测试代码和主模块代码中都匹配时 我才能使其成功 给出以下模块 listdir py from subprocess import Popen PIPE def listdir dir cm
  • ActiveMQ 5.11 与 WebSphere 应用程序服务器 8.5

    有谁知道我需要将 ActiveMQ 5 11 中的哪些 jar 与 IBM Websphere Application Server 8 5 一起使用才能创建新的 ActiveMQ JMS 提供程序 我发现与旧版 ActiveMQ 相关的讨
  • iOS 和 OSX 上的 Captive Network Assistant 上的 Ajax

    ajax 可以工作吗强制网络助手在 iOS 和 OSX 上 我在用jquery执行以下操作 但不起作用 这响应文本变量既不是 true 也不是 false 在适当的 Safari 浏览器以及 Android 和 Windows 设备上运行良
  • 从 sympy 求解二阶微分方程组

    我正在使用二阶拉格朗日方程解决多自由度动力学问题 我使用 sympy 来获取运动方程 现在计算导数后这些方程变得相当长 尽管 sympy 简化似乎无法进一步简化它 我的问题实际上是如何从这里解决这个由三个二阶颂歌组成的系统 我不知道如何转换
  • 如何实施单点登录

    我想实现 SSO 单点登录 我发现了很多关于 CAS OpenID 和许多不同事物的链接和文章 我真的迷失了那么我应该使用 CAS 吗 我安装了 CAS Server 并将其部署到 Tomcat 中 你下一步怎么做 或者这是错误的 您能解释
  • 使用 Facebook SDK 4.1.2 创建登录按钮时出现问题

    我正在尝试创建一个应用程序 该应用程序将允许用户通过他们的 Facebook 帐户登录 我想通过 eclipse 使用新的 Facebook SDK 4 1 2 为了在 eclipse 中使用新的 SDK 我遵循本教程 我现在可以在不使用
  • Wix RemoveFile 和 RemoveFolder 用于删除剩余内容

    我有以下 wix 文件 该文件应该在安装过程中调用自定义操作 自定义操作将创建程序所需的一些文件 由于 Wix 只会删除安装程序安装的文件 因此自定义操作创建的文件将被保留 所以我求助于删除文件由维克斯提供 我有以下 Wix 文件
  • 在进程之间共享条件变量和互斥锁:互斥锁之前是否必须锁定?

    我需要一些帮助来理解如何使用 C 中的条件变量来解决练习 这是一个小例子 include
  • Listview 每 6 次重复项目

    希望大家都好 我知道这个问题之前已经被审查过几次 但经过长时间的搜索 我仍然没有找到解决方案 我的自定义列表视图每 6 个项目就会重复一次 已经检查并尝试过 1 layout width 和layout height 不包含wrap con
  • Python 迭代器返回不需要的“None”

    为什么我的迭代器在输出中返回额外的 None 对于下面的参数 示例 我得到 None 4 None 而不是想要的 4 谁能解释为什么我得到额外的 None 以及如何修复它 打印输出 返回 仅出现一次 因此我假设只有一项应附加到返回调用函数中
  • 如何在Eclipse中使用Maven导入Android AAR依赖项?

    注意 我使用的是 Maven 3 2 2 Eclipse Luna 这是我的 pom xml 中使用 Android AAR 存档的依赖项
  • 将 socket.io 与 cordova 和 IOS 设备一起使用

    我正在尝试使用这个简单的教程 http socket io socket io with apache cordova 我的node js工作正常 我模拟到iOS没有问题 但是socket io不工作 这是我的javascript 与上面的
  • 获取用户控件单击事件中的 splitContainer 上下文

    先生 我有一个拆分容器 其中在右侧面板中有一个用户控件 在用户控件中 我有几个按钮 例如视图 新建 编辑等 该用户控件的底部将根据左侧单击的链接打开一个表单导航窗格 现在 当我单击用户控件的视图按钮时 我应该在其下方打开一个新表单 如何在单
  • Ruby 2.4 和 Rails 4 堆栈级别太深 (SystemStackError)

    我正在尝试在 Rails 4 0 8 中运行新创建的项目 但收到错误消息 rails s gt Booting WEBrick gt Rails 4 0 8 application starting in development on ht
  • 为什么 Ctrl+Space(自动完成)在 Android Studio、Intellij 和其他 JetBrains IDE 中突然停止工作?

    我注意到Ctrl Space已停止给我自动完成建议 我必须删除前面的代码并重新开始输入才能获得任何自动完成建议 起初我以为这与 GitHub CoPilot 的建议有关 但禁用并没有帮助 最奇怪的是 当我去检查键盘映射是否被搞乱时 Ctrl
  • 使 Java Swing 模态对话框的行为类似于 Mac OSX 对话框

    我正在编写一个小型应用程序 需要一个进度条显示在框架标题栏的中心 就像 Mac OSX 应用程序中常见的那样 我有两个问题 1 我已经管理了定位 但我必须对父框架的标题栏高度进行硬编码 有没有一种 软 方法来获取标题栏的高度 在对话框的构造