【问题标题】:In Swing, is there a way to extract a predefined mouse cursor Image from the toolkit?在 Swing 中,有没有办法从工具包中提取预定义的鼠标光标图像?
【发布时间】:2023-03-07 09:56:01
【问题描述】:

当用户将鼠标悬停在可以单击以获得上下文相关帮助的对象上时,我想通过用问号“标记”内置默认鼠标光标来制作自定义帮助光标。我希望它能够跨平台/外观很好地工作(例如,看起来与白色 Windows 鼠标和黑色 Mac 鼠标一致。)有没有办法从当前工具包中获取光标图像,以便我可以生成一个组合图像设置为光标?

This question 指出无法从 Cursor 对象中获取信息。那里还有一条评论建议在 JRE 中四处寻找,我也尝试了一下:在 google 图像中,我没有找到任何可以直接访问的图形文件来掠夺

另一种方法是添加一个 mouseMoved 侦听器并在光标右侧手动绘制一点(我想是在父级上,以避免在边界处剪裁?)但我有点担心开销,并且在最初的探索,这看起来非常复杂。我也会接受有关查找或制作一个不错的帮助光标的其他建议。 (手是最好的内置,但它没有像问号那样清楚地表示“帮助”。)

【问题讨论】:

    标签: java swing mouse-cursor


    【解决方案1】:

    一般来说,不会。大多数游标归平台的主机操作系统所有,但也有少数位于$JAVA_HOME/lib/images/cursors/,例如:

    $ ls -1 库/图像/光标/ 游标属性 无效32x32.gif 主题_CopyDrop32x32.gif 主题_CopyNoDrop32x32.gif 主题_LinkDrop32x32.gif 主题_LinkNoDrop32x32.gif 主题_MoveDrop32x32.gif 主题_MoveNoDrop32x32.gif

    【讨论】:

      【解决方案2】:

      我不确定这是否是您的最佳解决方案,因为一个好的内置鼠标光标应该是最好的。无论如何,您可以使用鼠标侦听器并根据鼠标位置在玻璃板上绘图。 Here's 一个玻璃板绘图示例。

      【讨论】:

      【解决方案3】:

      Java 使用默认系统光标,但拖放光标除外,它使用自己的光标。

      所以对于除 DnD 之外的每个游标,请参阅 Extract cursor image in Java 。必须使用 JNA,并且可以轻松地将其添加到任何 Maven 项目中。

      对于 DnD 游标,trashgod 的解决方案很好。 它们可以这样加载:

      private static Path customSystemCursorPath = null;
      
      public static Image loadDnDCursorImage(String cursorName) throws IOException {
      
          if (customSystemCursorPath == null) {
              String jhome = System.getProperty("java.home", "????");
              customSystemCursorPath = Paths.get(jhome, "lib", "images", "cursors");
          }
      
          // TODO change this to retrieve the cursor filename from  cursors.properties
          cursorName = "win32_" + cursorName + "32x32.gif";
      
          Path cursorPath = customSystemCursorPath.resolve(cursorName);
      
          Image image = ImageIO.read(cursorPath.toFile());
          return image;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-16
        • 1970-01-01
        相关资源
        最近更新 更多