java - 使用 Java 图形进行内部裁剪

标签 java graphics java-2d

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

是否可以使用图形剪裁支持,还是我需要计算交点并自己剪裁线?

最佳答案

您需要使用 Area类(class)。此示例将演示如何执行您的要求:

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;
    }

}

关于java - 使用 Java 图形进行内部裁剪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1241253/

相关文章:

java - 使用 MAC OS 在 Eclipse JAVA 中添加库

java - 如何在 2D 中的 2 点之间创建一条曲线并返回使该曲线每隔 d 距离的点?

java - 如何在多线程 HTTP Client 环境中使用基本身份验证?

java - 如何将选定的 OnItemLongClick 从一个 ViewPager 项目拖到另一个项目

java - Cloudfront Signed Cookies 在 java/javascript 中的完整服务器端实现

c++ - glTexImage2D 'target is not valid'

java - 查看管道技术示例

java - 鼠标悬停在曲线上

Java错误?为什么画矩形而不是椭圆?

java - 为什么我的笑脸 GUI 看起来是一种颜色,而不是所有元素都有自己单独的随机颜色?