在 Java 中在屏幕上绘图

2024-01-04

我想用 Java 创建一个帮助应用程序。其行为如下:每当通过全局快捷方式调用时,它都可以在屏幕上绘制一些文本(不是在其自己的应用程序窗口上,而是在屏幕顶部)。

类似的帖子是here https://stackoverflow.com/questions/3081204/draw-over-screen-with-quartz,但我想用Java实现这一点。

当我搜索“java在屏幕上绘制”之类的内容时,我只能得到很多关于Java2D的教程。

我想检查:1)是否可以在Java中绘制其他应用程序? 2)如果不可能,Mac / Ubuntu 中有其他替代方案吗?

多谢。

(旁注:我知道java没有全局快捷方式支持。我正在尝试其他方法来解决这个问题,这里不相关)


只需在屏幕上放置一个透明窗口并在其上绘图即可。透明窗口甚至支持点击,因此效果就像您直接在屏幕上绘图一样。

使用 Java 7:

Window w=new Window(null)
{
  @Override
  public void paint(Graphics g)
  {
    final Font font = getFont().deriveFont(48f);
    g.setFont(font);
    g.setColor(Color.RED);
    final String message = "Hello";
    FontMetrics metrics = g.getFontMetrics();
    g.drawString(message,
      (getWidth()-metrics.stringWidth(message))/2,
      (getHeight()-metrics.getHeight())/2);
  }
  @Override
  public void update(Graphics g)
  {
    paint(g);
  }
};
w.setAlwaysOnTop(true);
w.setBounds(w.getGraphicsConfiguration().getBounds());
w.setBackground(new Color(0, true));
w.setVisible(true);

如果您的系统不支持每像素半透明度或不提供点击行为,您可以通过设置 Window 来尝试每像素透明度Shape反而:

Window w=new Window(null)
{
  Shape shape;
  @Override
  public void paint(Graphics g)
  {
    Graphics2D g2d = ((Graphics2D)g);
    if(shape==null)
    {
      Font f=getFont().deriveFont(48f);
      FontMetrics metrics = g.getFontMetrics(f);
      final String message = "Hello";
      shape=f.createGlyphVector(g2d.getFontRenderContext(), message)
        .getOutline(
            (getWidth()-metrics.stringWidth(message))/2,
            (getHeight()-metrics.getHeight())/2);
      // Java6: com.sun.awt.AWTUtilities.setWindowShape(this, shape);
      setShape(shape);
    }
    g.setColor(Color.RED);
    g2d.fill(shape.getBounds());
  }
  @Override
  public void update(Graphics g)
  {
    paint(g);
  }
};
w.setAlwaysOnTop(true);
w.setBounds(w.getGraphicsConfiguration().getBounds());
w.setVisible(true);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Java 中在屏幕上绘图 的相关文章

  • 我应该使用 JDBC getNString() 而不是 getString() 吗?

    我们正在构建一个由 Oracle 数据库支持的 Java 应用程序 我们使用 JDBC 驱动程序 访问该数据库ojdbc6 jar and orai18n jar 数据库模式主要使用以下方式存储文本列NVARCHAR2数据类型 The JD
  • 为什么Java中的文件名与公共类名相同? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在Java中 文件名应该与文件名相同public class包含在该文件中 为什么这是一个限制 它有什么目的 Java 有一个有趣的方法 如果给
  • Apache Commons VFS - 无法解析文件

    VFS 方法无法处理此 URI jboss server temp dir local outgoing配置在jboss beans xml这是决心 C Download jboss eap 5 1 1 server default tmp
  • 如何在 Python 中加密并在 Java 中解密?

    我正在尝试在 Python 程序中加密一些数据并将其保存 然后在 Java 程序中解密该数据 在Python中 我像这样加密它 from Crypto Cipher import AES KEY 1234567890123456789012
  • java数学中的组合“N选择R”?

    java库中是否有内置方法可以为任何N R计算 N选择R 公式 实际上很容易计算N choose K甚至不需要计算阶乘 我们知道 公式为 N choose K is N N K K 因此 公式为 N choose K 1 is N N N
  • Hazelcast:连接到远程集群

    我们有一组 Hazelcast 节点 全部运行在一个远程系统 具有许多节点的单个物理系统 上 我们希望从外部客户端连接到该集群 一个 Java 应用程序 它使用如下代码连接到 Hazelcast ClientConfig clientCon
  • 默认情况下,JSF 生成不可用的 ID,这些 ID 与 Web 标准的 CSS 部分不兼容

    活跃的 JSF 或 Primefaces 用户能否解释一下为什么默认情况下会发生这种情况 为什么没有人对此采取任何措施
  • 在Java中将日期“2020-05-22T12:51:20.765111Z”解析为Instant [重复]

    这个问题在这里已经有答案了 如何解析 2020 05 22T12 51 20 732111Z Java 中的 Instant I used LocalDateTime parse startTime DateTimeFormatter of
  • 单元测试、集成测试还是设计中的问题?

    我编写了我的第一个单元测试 我认为它过于依赖其他模块 我不确定是否是因为 这是一个复杂的测试 我实际上已经编写了集成测试或 我的设计有问题 我首先要说的是 虽然我有大约 4 年的开发经验 但我从未学过 也没有人教过自动化测试 我刚刚使用 H
  • 如何从 Trie 中检索给定长度的随机单词

    我有一个简单的 Trie 用来存储大约 80k 长度为 2 15 的单词 它非常适合检查字符串是否是单词 但是 现在我需要一种获取给定长度的随机单词的方法 换句话说 我需要 getRandomWord 5 来返回 5 个字母的单词 所有 5
  • Java:java.util.Preferences 失败

    我的程序将加密的产品密钥数据保存到计算机上java util Preferences类 系统首选项 而不是用户 问题是 在 Windows 和 Linux 上 尚未在 OSX 上测试过 但可能是相同的 如果我不运行该程序sudo或者具有管理
  • 如何加载图像文件到ImageView?

    我试图在从文件选择器中选择图像文件后立即显示该图像文件 文件选择器仅限于 png 和 jpg 文件 所选文件存储在文件类型的变量中 为此 我设置了一个 ImageView 我希望用这个新文件设置图像 唯一的问题是它的类型是文件而不是图像 如
  • java中的第三个布尔状态是什么?

    虽然我知道根据定义 布尔值仅包含两种状态 真或假 我想知道布尔值在用这些状态之一初始化之前有什么值 它默认为 false http java sun com docs books tutorial java nutsandbolts dat
  • 快速像素绘图库

    我的应用程序以每像素的方式生成 动画 因此我需要有效地绘制它们 我尝试过不同的策略 库 但结果并不令人满意 尤其是在更高分辨率的情况下 这是我尝试过的 SDL 好的 但是慢 OpenGL 像素操作效率低下 xlib 更好 但仍然太慢 svg
  • 线程上下文类加载器和普通类加载器的区别

    线程的上下文类加载器和普通类加载器有什么区别 也就是说 如果Thread currentThread getContextClassLoader and getClass getClassLoader 返回不同的类加载器对象 将使用哪一个
  • 如何在apache POI中读取excel文件的准确单元格内容

    当我读取单元格的内容时 例如如果它是日期格式 它会转换为另一个值 例如 12 31 2099 gt 46052 和 50 00 gt 50 和 50 00 gt 0 5 但我想要的是获取每个单元格的确切字符串值 我的代码是这样的 cell
  • CISC 机器 - 它们不只是将复杂指令转换为 RISC 吗?

    也许我在架构上存在误解 但如果机器有 比如说 乘法指令 该指令是否未转换为更小的指令 或者过于复杂以至于最终与等效的 RISC 指令具有相同的速度 乘法是一个不好的例子 它在两种体系结构中都是一条指令 将上面的 乘法 替换为 CISC 中更
  • 检查 Java 字符串实例是否可能包含垃圾邮件数据的最简单方法

    我有一个迭代 String 实例的过程 每次迭代对 String 实例执行很少的操作 最后 String 实例被持久化 现在 我想为每次迭代添加一个检查 String 实例是否可能是垃圾邮件的检查 我只需验证 String 实例不是 成人材
  • 膨胀类 android.support.design.widget.CoordinatorLayoute 时出错

    我正在尝试运行我的应用程序 但不断收到标题中列出的错误 我读过周围的内容 人们说尝试将主题更改为 AppCombat 主题 但这似乎不起作用 以下是我遇到的错误 Process com example jmeyer27 crazytiles
  • 在 for 循环比较中使用集合大小

    Java 中 Collections 的 size 方法是否有编译器优化 考虑以下代码 for int i 0 i

随机推荐

  • 自删除bash脚本

    bash 脚本如何在遇到删除自身的语句后执行 例如 当我运行 test sh 脚本时 其中包含 lt some commands gt rm test sh lt some more commands gt end 脚本执行到最后才删除自身
  • 检查 mysql_query 是否返回任何结果的最佳方法?

    我正在寻找最好的方法来检查查询中是否返回了任何结果 我感觉这部分代码我写了很多次 有时会出错 有时则不会 例如 我运行此查询来检查用户名是否存在 然后再将新用户名插入数据库 result mysql query SELECT FROM 然后
  • 对矩阵中的列重新排序

    假设我有一个n row m列矩阵A 我想重新排序每一列m根据某些特定行的排序 例如 如果我采取order A k 这给了我列中元素的数字或字母顺序k 我现在想对矩阵中的每一列进行排序A根据这些排名 使元素1 n每行都按顺序对应于元素1 n
  • Mailchimp API /列出 merge_fields 的日期类型参数格式

    我有一个date我需要在 Mailchimp API 的 v3 版本中填充该 merge field 在我找到答案之前 我在谷歌上进行了很多搜索 希望这可以节省某人的时间 预期的格式是 mm dd yyyy 看起来月份和日期的个位数就可以了
  • 仅跟踪嵌套 div 标签中悬停子元素的鼠标移动

    我有一个可以有 n 个嵌套 div 标签的环境 我必须仅在子 div 中跟踪鼠标的鼠标移动时刻 我有以下代码 结果显示在列表中 Problem 如果我附加更多子 div 鼠标移动也会跟踪所有父级 div 我想要的是 仅获取鼠标悬停区域的鼠标
  • 如何将日期构建附加到 gradle 上的 versionNameSuffix

    我正在使用 Android Studio 我需要在后面附加一个后缀versionNameSuffix在我的安卓设备上构建 gradle文件 我有三种不同的构建类型 我只需将日期时间附加到我的 测试版 版本中 我的实际文件是 defaultC
  • 为什么空格会影响 ruby​​ 函数调用?

    我收到此代码的语法错误 render json what gt created whatCreated gt thing htmlOutput gt render to string partial some partial 但使用这段代码
  • 使用 Yfinance 获取市值数据

    我试图使用 yfinance 获取股票的市值数据 这是我的代码 import yfinance as yf import numpy as np from pandas datareader import data import panda
  • 无法执行 HTTP 请求:Flink 中等待来自池的连接超时

    我正在研究一个将一些文件上传到 s3 存储桶的应用程序稍后 它从 s3 存储桶读取文件并将其推送到我的数据库 我在用着弗林克1 4 2 and fs s3a API用于从 s3 存储桶读取和写入文件 将文件上传到 s3 存储桶工作正常 没有
  • Jquery 表单插件还是 Jquery 序列化?

    我想知道有什么优点jQuery 表单插件 http jquery malsup com form getting started已经结束了序列化 http api jquery com serializeArray 如果我选择使用表单插件
  • jquery datepicker突出显示假期

    我正在尝试制作一个 jquery 日期选择器日历 它会突出显示假期 并在日期选择器上的日期悬停时将假期名称作为工具提示 假期日期来自 php 文件 holidays php 我的问题是 我似乎无法突出显示所有假期 它只突出显示一个日期 更具
  • 动画旋转 UIImageView

    我想旋转一个UIImageView左 右大约 10 度 但有一个平滑的动画 而不是我看到的突然转向 player transform CGAffineTransformMakeRotation angle UIView beginAnima
  • 如何在 IntelliJ IDEA 中多次运行同一个项目?

    我正在使用 IntelliJ IDEA 开发应用程序的客户端 为了调试我需要运行多个客户端 我想使用 IntelliJ IDEA 不可能在不同的窗口中运行相同的项目 那么如何运行多个客户端进行调试呢 You can 运行或调试 https
  • 如何在 php 中使用 C modf 函数?

    好像没有一个吧 使用 PHP 的fmod http php net manual en function fmod php
  • Redis 中的 AOF 和 RDB 备份

    这个问题是关于Redis持久化的 我使用 Redis 作为社交网站的 快速后端 这是设置的单个服务器 我一直在稳步地将 PostgreSQL 的职责转移到 Redis 目前在etc redis redis conf 追加设置设置为appen
  • SoundCloud,通过 api 下载或流式传输文件

    我尝试使用 download url 从 soundcloud 获取文件 我收到 重定向 或 401 未经授权 如何将其下载 流式传输到客户端 thanks 如果您收到 401 响应 那么您应该包括您的client id在请求中 它也可能是
  • 将文本文件嵌入到可以使用 fopen 访问的 exe 中

    我想将包含一些数据的文本文件嵌入到我的程序中 我们称之为 data txt 该文本文件通常加载一个函数 该函数需要文本文件的文件名作为输入 并最终使用 fopen 调用打开 FILE name fopen data txt 我无法真正更改此
  • 通过管道的 gnuplot C++ 接口 - 无法打开 wgnuplot

    我正在尝试从我的 C 程序中在 gnuplot 中实时绘制图形 我已经安装了 gnuplot 4 6 并且能够打开 gnuplot exe 并绘制图形 但是我无法通过管道打开应用程序 这是我使用过的代码 include
  • 尝试使用 PUT 将 PDF 作为 Blob 上传到 S3 存储桶时禁止 403

    我正在尝试做什么 从浏览器客户端上传 PDF 文件 而不会暴露任何凭据或任何令人讨厌的内容 基于this https github com jbesw askjames s3uploader 我以为可以做到 但对我来说似乎不起作用 前提是
  • 在 Java 中在屏幕上绘图

    我想用 Java 创建一个帮助应用程序 其行为如下 每当通过全局快捷方式调用时 它都可以在屏幕上绘制一些文本 不是在其自己的应用程序窗口上 而是在屏幕顶部 类似的帖子是here https stackoverflow com questio