在模态 JDialog 之外时光标不正确?

2024-04-01

使用方法时setCursor(),要更改组件使用的光标,所有组件都可以正常工作,包括JFrame and JDialog.

这里的问题在于modal JDialog。当鼠标处于inside对话框中,光标显示在右侧。但是,当鼠标移动时outside对话框中,光标被重新设置为操作系统默认值,即使底层JFrame使用与对话框相同的自定义光标。

我搜索了很多,发现了一些相关的问题,但没有一个对此有正确的答案。

我使用的是 Windows 10; JDK 1.8.0_40。

SSCCE:

package br.shura.knockback;

import java.awt.Cursor;
import java.awt.Dimension;
import javax.swing.*;

public class DialogCursorSSCCE extends JFrame {
  public DialogCursorSSCCE() {
    Cursor cursor = new Cursor(Cursor.CROSSHAIR_CURSOR);
    JButton button = new JButton("Click me to open dialog.");

    button.addActionListener(event -> {
      JDialog dialog = new JDialog();
      JLabel label = new JLabel("Move the mouse outside this dialog.");
      int width = label.getFontMetrics(label.getFont()).stringWidth(label.getText());

      label.setPreferredSize(new Dimension(width + 10, 50));
      dialog.add(label);
      dialog.pack();
      dialog.setCursor(cursor);
      dialog.setLocationRelativeTo(button);
      dialog.setModal(true);
      dialog.setTitle("Dialog");
      dialog.setVisible(true);
    });
    button.setAlignmentX(CENTER_ALIGNMENT);
    button.setMaximumSize(new Dimension(400, 100));
    setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
    add(button);
    setCursor(cursor);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setExtendedState(MAXIMIZED_BOTH);
    setTitle("DialogCursorSSCCE");
  }

  public static void main(String[] args) {
    new DialogCursorSSCCE().setVisible(true);
  }
}

但是,当鼠标移出对话框时,光标将重新设置为操作系统默认值,

我对正在发生的事情的猜测是,对话框的边框是操作系统对等组件。因此,当您离开 Swing 组件时,会为操作系统对等方生成鼠标悬停事件,因此光标将设置为操作系统默认值。

当您完全离开对话框时,框架不会接收任何事件,因为对话框是模态的,因此系统光标在框架上时仍然显示。

注意当光标进入标题栏时光标如何变化。

现在尝试以下操作:

JDialog dialog = new JDialog();
dialog.setUndecorated(true);
dialog.getRootPane().setWindowDecorationStyle(JRootPane.PLAIN_DIALOG);

现在,光标仅在到达边框时才会改变,因为 Swing 正在绘制标题栏。

我也尝试过:

  JDialog dialog = new JDialog();
  dialog.setUndecorated(true);

因此没有任何装饰,但光标离开窗口时仍然会发生变化。

我不知道有什么办法。

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

在模态 JDialog 之外时光标不正确? 的相关文章

  • 使用比较器对对象进行排序给出空指针

    我正在尝试对包含 3 张卡的 ArrayList 进行排序 我正在用比较器来做这件事 这是否太过分了 Card getRank 返回 2 到 14 之间的整数 我完全不知道哪里出了问题 我之前已经成功完成了这个 并与我的其他代码进行了比较
  • 如何在 Groovy 中的 JSON Converter 方法中保留字母大小写?

    我正在尝试将 groovy 对象解析为 JSON 属性名称不遵循正确的驼峰式大小写形式 class Client String Name Date Birthdate 当我使用这个时 Client client new Client Nam
  • 如何在流中收集到TreeMap中?

    我有两个Collectors groupingBy在流中 我需要收集所有信息TreeMap 我的代码 Map
  • java.sql.SQLException: ORA-01005: 给定的密码为空;登录被拒绝

    我在尝试连接到数据库时遇到以下异常 java sql SQLException ORA 01005 null password given logon denied at oracle jdbc driver T4CTTIoer proce
  • 如何使用 Spring Security 跨多个基于 JVM 的应用程序实现单点登录

    我目前正在尝试跨多个基于 JVM Grails Servlet 的 Web 应用程序实现单点登录解决方案 这些应用程序目前都部署在同一个 servlet 容器 当前是 Tomcat 但不想将我的解决方案仅限于 Tomcat 中 所有 Web
  • 如何在 Java 中安装附加包?

    我对 Java 很陌生 我想使用名为的包中的一些功能daj 教程代码有以下几行 import daj import java util import java lang Math import Msg 但第一行和第四行会产生红色下划线 导致
  • @NotNull.List 的目的

    当我查看标准时限制条件 http docs oracle com javaee 6 api javax validation constraints package summary html在 Bean Validation API JSR
  • 从继承的受保护 Java 字段创建公共访问器

    我怎样才能完成以下工作 class Foo extends javax swing undo UndoManager increase visibility works for method override def editToBeUnd
  • 将二进制数据的 byte[] 转换为 String

    我有二进制格式的数据 hex 80 3b c8 87 0a 89 我需要将其转换为字符串 以便通过 Jackcess 将二进制数据保存在 MS Access 数据库中 我知道 我不打算在 Java 中使用 String 来存储二进制数据 但
  • 将 emoji 替换为适当的 java 代码

    我正在开发一个简单的java程序 它可以接受这样的字符串 停止 你违反了 法律 但是现在 你 并将每个表情符号替换为适当的 java 字符 我不知道该怎么称呼他们 这是一个例子 汽车表情符号 将替换为 uD83D uDE97 这允许我有一个
  • org.hibernate.MappingException:没有 JDBC 类型的方言映射:1111

    我使用的是 postgres v8 3 它的列类型为 XML DDL 看起来像这样 CREATE TABLE contact ID INTEGER NOT NULL NAME VARCHAR NOT NULL Details XML 在映射
  • Spring @Value 添加验证小于

    我使用以下属性值注入 我如何向此操作添加小于验证 我的意思是我想设置一个验证user maxpassiveday可以说 财产价值不得低于 100 Value user maxpassiveday int maxpassiveday 使用Sp
  • Java 中意外的负数

    import java util public class Prac9FibonacciNumbers public static void main String args int x new int 100 x 0 1 x 1 1 fo
  • 如何使用 UUID 生成唯一的正 Long

    我需要为我的数据库主键列生成唯一的长 ID 我以为我可以用UUID randomUUID getMostSignificantBits 但有时它也会产生一些负多头 这对我来说是个问题 是否可以从 UUID 中仅生成正长 将会有数十亿个条目
  • 如何减少 JSF 中的 javax.faces.ViewState

    减少 JSF 中视图状态隐藏字段大小的最佳方法是什么 我注意到我的视图状态约为 40k 这会在每次请求和响应时下降到客户端并返回到服务器 特别是到达服务器时 这对用户来说会显着减慢 我的环境 JSF 1 2 MyFaces Tomcat T
  • 在 Java 中打开现有文件并关闭它。

    是否可以在java中打开一个文件附加数据并关闭多次 例如 psuedocode class variable declaration FileWriter writer1 new FileWriter filename fn1 writer
  • Android - 保持用户登录状态

    我正在尝试使用 PHP 和 MySQLi for Android 进行登录 我不明白的是如何保持用户登录状态 我看到一个简单的教程 其中有人使用 SQLite 来保护信息 但我不知道这是否真的安全 如何保存用户信息以保持用户登录状态 谢谢
  • 有时 Properties.load() 会跳过行

    在以下情况下 Properties load 会跳过 InputStream 的第二行 这是 Java 的错误还是正常行为 public class PropTest public static void main String args
  • 如何将多部分文件从另一个服务发送到一个服务

    我有两个端点 api 它们是 uploadand 重定向 upload是我直接上传文件的地方 重定向是我接收文件并将其传递给上传并获取 JSON 响应的地方 upload 所以下面是我的代码 package com example impo
  • 在Java的System.out中以表格格式输出

    我正在从数据库获取结果 并希望将数据作为 Java 标准输出中的表输出 我尝试过使用 t 但我想要的第一列的长度变化很大 有没有办法将其显示在类似输出的漂亮表格中 Use System out format http java sun co

随机推荐

  • 更新虚拟机选项后 Android Studio 无法启动

    我最近在运行 OSX 10 11 的 Mactop pro 上安装了 android studio 使用标准 Apple JRE JDK 我遇到了 IDE 速度慢和模拟器挂起的问题 经过一些研究后 建议我将 VM 选项设置为 Xmx2048
  • Symfony2 Jobeet 教程第 3 天错误无效映射

    当我用代码生成捆绑实体时 php app console doctrine generate entities EnsJobeetBundle 我收到这个错误 学说 通用 持久性 映射 映射异常 类 Ens JobeetBundle Ent
  • NullReferenceException 尝试读取连接字符串

    我有两个项目 一种是 Web 另一种是 Windows 窗体 Web项目连接到数据库 但Windows项目在读取连接字符串时抛出异常NullReferenceException 我使用相同的类来连接两个项目 使用 LINQTOSQL 建立连
  • Visual Studio Code clang 错误:Mac 上的链接器命令失败,退出代码 1

    我是编程新手 想尝试使用 VS Code 进行 C 开发 我收到此错误 但无法在线找到解决方案 clang 错误 链接器命令失败 退出代码为 1 使用 v 查看调用 终端进程终止并退出代码 1 我得到了一个包含函数定义的 cpp 文件和一个
  • 如何从字符串中删除“http://”部分?

    我有这个方法 private List
  • Facebook API:Instagram 帐户丢失

    每当创建或更新Ad很有创意 但我收到此错误 error message Invalid parameter type OAuthException code 100 error subcode 1772103 is transient fa
  • 在 AVPlayer 中播放网络状况不佳的流媒体

    当 AVPlayer 播放来自网络流的资源时 它会在到达下载内容的末尾时暂停 所以 我的问题是 如何知道它是因为网络不好而停止的 下载后如何播放 比如说 接下来的 10 秒资源 当 AVPlayer 的缓冲区为空时 您可以添加一个观察者 s
  • 如何替换不可打印的 unicode 字符 (Javascript)

    我已经浪费了大量的时间来处理字符串 由其他一些源生成 并且我发现问题在于字符串具有不可打印的字符 今天我正在处理 javascript 有谁知道如何替换javascript中不可打印的unicode字符 我在这里发现了类似的东西 如何在 J
  • 以适度可扩展的方式交付活动提要项目

    我正在开发的应用程序有一个活动源 每个用户都可以在其中看到他们朋友的活动 很像 Facebook 我正在寻找一种适度可扩展的方式来动态显示给定用户的活动流 我说 适度 是因为我希望只用一个数据库 Postgresql 来做到这一点并且may
  • 在 Ubuntu 上使用 R 获取抗锯齿图

    我升级了系统并重新安装了 R 现在我的标准 X 11 绘图没有抗锯齿 它们看起来呈锯齿状 而且字体看起来很糟糕 我似乎记得过去有过这样的问题 但不记得我做了什么 其他一些信息 qplot也出来了非抗锯齿 绘制到一个png设备也产生非抗锯齿输
  • 如何在 Flutter 中添加文件选择器插件?

    我正在创建一个 Flutter 项目 其中有一段数据 JSON 我想将其导入和导出到用户想要的位置 为了实现这一目标 我需要一个File PickerFlutter 中的插件 现在 我搜索了Dart Packages存储库 file pic
  • 如何使用 create-react-app 提供 SSL 证书?

    我正在尝试托管一个我使用 Facebook 样板在本地创建和测试的 React 应用程序 客户端应用程序与我使用 node js 制作的 API 进行交互 并且我在设置安全连接时没有遇到任何问题 使用 node js 客户端发送我的 SSL
  • Xcode 11.4 编译错误“缺少包产品 <包名称>”

    当我整合一个本地包 https developer apple com documentation xcode creating a standalone swift package with xcode在我的 Xcode 项目中 最初一切
  • 使用 JAXB 将元素表示为布尔值?

    我们有这个 XML
  • 如何使用urllib登录网站?

    我正在尝试登录这个网站 http www broadinstitute org cmap index jsp http www broadinstitute org cmap index jsp 我在 Windows 上使用 python
  • EasyMock 中“same”和“eq”的区别

    EasyMock 中的 same 和 eq 之间是否存在显着 甚至任何 差异 same检查两个对象是否实际上是同一个实例 引用相等 eq calls equals因此检查两者是否具有相同的值 值相等 请记住 默认equals实施用途 内部
  • Tensorflow 相当于 numpy.diff

    是否存在相当于的张量流numpy diff https docs scipy org doc numpy reference generated numpy diff html 计算沿给定轴的第 n 个离散差值 对于我的项目 我只需要 n
  • ARM 9处理器的opencv交叉编译

    我需要为 ARM 9 处理器交叉编译 opencv 我有处理器的工具链 但不知道如何交叉编译 请告诉我为arm板交叉编译的过程 谢谢大家 看这个参考 http www airs com ian configure configure 5 h
  • 在 Android 中使用签名 URL 从 Amazon S3 + CloudFront 播放 m3u8

    我能够使用签名 URL 访问播放列表文件 m3u8 但问题是 要访问播放列表中的流文件 ts 每个文件的 URL 也需要签名 例如 我可以使用签名 URL 访问 playlist m3u8 EXTM3U EXT X TARGETDURATI
  • 在模态 JDialog 之外时光标不正确?

    使用方法时setCursor 要更改组件使用的光标 所有组件都可以正常工作 包括JFrame and JDialog 这里的问题在于modal JDialog 当鼠标处于inside对话框中 光标显示在右侧 但是 当鼠标移动时outside