使用 Java Graphics 进行内部剪辑

2023-11-22

我需要使用 java.awt.Graphics 绘制一条线,但只应渲染位于矩形之外的线部分。

是否可以使用图形剪切支持,或者我是否需要自己计算交集并剪切线?


您需要使用Area班级。此示例将演示如何执行您所要求的操作:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Area;
import java.awt.geom.Rectangle2D;

import javax.swing.JFrame;
import javax.swing.JPanel;


public class Test extends JPanel {

    public static void main(String[] args) {
        JFrame f = new JFrame();
        Test t = new Test();
        f.getContentPane().setLayout(new BorderLayout());
        f.getContentPane().add(t,BorderLayout.CENTER);
        f.pack();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }

    public Test() {
        setPreferredSize(new Dimension(300, 300));
    }

    public void paintComponent(Graphics g) {
        Graphics2D g2 = (Graphics2D)g.create();
        Rectangle2D rectangleNotToDrawIn = new Rectangle2D.Double(100, 100, 20, 30);
        Area outside = calculateRectOutside(rectangleNotToDrawIn);
        g2.setPaint(Color.white);
        g2.fillRect(0, 0, getWidth(), getHeight());
        g2.setPaint(Color.black);
        g2.setClip(outside);
        g2.drawLine(0, 0, getWidth(), getHeight());

    }


    private Area calculateRectOutside(Rectangle2D r) {
        Area outside = new Area(new Rectangle2D.Double(0, 0, getWidth(), getHeight()));
        outside.subtract(new Area(r));
        return outside;
    }

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

使用 Java Graphics 进行内部剪辑 的相关文章

随机推荐

  • 带时间间隔的 CSS 动画

    我想无限地旋转图形元素 但一步一步有一定的时间间隔 例如 旋转 90 度 平滑动画 然后 5 秒后再旋转 90 度 并无限重复相同的操作 仅使用CSS 可以完成此操作吗 这是我的JS BIN 很简单 以下代码将转换限制为关键帧40 60 整
  • 使用 TXMLDocument 构建 XML 文档时出现问题

    我是delphi新手 现在我必须阅读create an x ml 我的代码如下 function foo createXMLDocument TXMLDocument var res TXMLDocument rootNode IXMLNo
  • 快速更改 UImenu 的位置

    我想向我的应用程序添加一个 UIMenu 我正在练习它 现在有一个问题是否可以设置 UIMenu 的位置UIMenu比当前显示的按钮稍高一点 正如您在这张照片中看到的 菜单当前覆盖了选项卡栏 我想将其设置为比选项卡栏高一点 这是我的代码 l
  • 如何从 setuptools 安装程序 (setup.py) 中生成 python grpc 代码?

    我们在存储库中有一些 gRPC 的原型文件 我读到提交生成的代码并不好 所以我想我需要将生成作为软件包安装的一部分 例如 setuptools setup py 但是 要生成 gRPC 代码 您需要首先通过运行来安装包pip install
  • Spring Data 中的查询创建 - 动态 where 子句

    Spring data中有没有办法动态形成where子句 我想要做的是有一个方法 类似于 findBy get 方法 它使用上述非 NULL 属性运行 WHERE 和 AND 例如 Consider the object Person fi
  • SQL Server 分区 - 唯一索引错误

    我有一个按 TRANSACTION DATE TIME 分区的表 表有一列 ID 我想为分区方案上的 ID 创建一个唯一索引 如下所示 CREATE UNIQUE NONCLUSTERED INDEX IX ID ON PS DATETIM
  • 在 AngularJS 中拒绝带有多个参数的 Promise(如 $http)

    回调 httpPromise 有多个参数 主体 状态 标头 配置 我想手动创建类似的承诺 但不知道该怎么做 我想做的或多或少是 myservice action then function status message config 我知道
  • IIS7 劫持我的 Coldfusion 错误页面

    在我的异常处理文件中 我将状态代码设置为 404 然后渲染 n 个 HTML 页面 作为错误页面 想想失败鲸鱼
  • 同时安装 Visual Studio 2010 和 VS2008 会导致问题吗?

    这可能会导致什么样的问题 安装在虚拟机里更好吗 并行安装问题始终可能存在 您应该采取适当的保护措施 例如备份 使用虚拟机等 根据我个人的经验 它的效果很好 在我的 Tech Ed 演示中 我使用 Visual Studio 2005 200
  • 如何更改 Java 中 HTTP 响应中的字符集编码

    我必须从远程服务器获取一些 JSON 对象 为此我正在使用这个功能 它工作得很好 除了有时会获取一些奇怪的数据 我相信这是因为它使用 ASCII 字符集进行解码 请在下面找到我正在使用的方法 public HttpResponse call
  • Java 中的双向映射? [复制]

    这个问题在这里已经有答案了 我在 Java 中有一个简单的整数到字符串的映射 但我需要能够轻松地从整数检索字符串 以及从字符串检索整数 我尝试过 Map 但它只能从整数中检索字符串 这是一种方法 private static final M
  • 如何在 ASP.NET Core 中结合 FromBody 和 FromForm BindingSource?

    我创建了一个新的 ASP NET Core 2 1 API 项目 其中包含Datadto 类和此控制器操作 HttpPost public ActionResult
  • 如何获取对象属性的类型提示?

    我想获取对象属性的类型提示 我只能获得该类的提示 而不能获得该类的实例 我尝试过使用foo instance class from here但这只显示了类变量 那么在示例中我如何获得类型提示bar class foo var int 42
  • 在 Genymotion Android 中连接到 VPN

    我正在尝试在 Genymotion 虚拟设备中配置并连接到 VPN 我可以在虚拟设备中配置 VPN 连接 但无法连接 没有显示错误 我在我的 PC 和真实 Android 设备中使用了相同的设置 它在设备和 PC 中运行良好 我认为是 Vi
  • 在单个 RDS 文件中保存多个变量

    我想将变量列表传递给 saveRDS 以保存它们的值 但它会保存它们的名称 variables lt c A B C saveRDS variables file R 它保存单个向量 变量 我也尝试过 save variables file
  • 如何从文件中读取前 n 行和后 n 行?

    如何读取文件的前n行和后n行 For n 2 我读online that head n2 tail n2 会起作用 但事实并非如此 cat x 1 2 3 4 5 cat x head n2 tail n2 1 2 预期输出为n 2将会 1
  • 对多个条件使用 if else 语句

    样本数据 x lt runif 100 min 0 max 1 y lt runif 100 min 0 max 1 dif lt x y dat lt data frame x dif 我想要做的是在数据框中创建另一列dat called
  • 如何在容器内运行 kubectl 命令?

    在 pod 内的容器中 如何使用 kubectl 运行命令 例如 如果我需要在容器内执行类似的操作 kubectl 获取 Pod 我已经尝试过 在我的 dockerfile 中 我有以下命令 RUN curl LO https storag
  • php ajax表单提交而不刷新父页面

    我有一些关于 ajax 表单提交的问题 send on click function ajax type POST url ads process php data ads serialize success function if dat
  • 使用 Java Graphics 进行内部剪辑

    我需要使用 java awt Graphics 绘制一条线 但只应渲染位于矩形之外的线部分 是否可以使用图形剪切支持 或者我是否需要自己计算交集并剪切线 您需要使用Area班级 此示例将演示如何执行您所要求的操作 import java a