你如何定義一個有洞的裁剪區域(通過Graphics2D.clip(Shape)
)?Java:創建有洞的裁剪區域?
例如:一個直角R1減去另一個矩形R2中R1
我敢肯定,這有一個簡單的答案,但我畫一個空白。
你如何定義一個有洞的裁剪區域(通過Graphics2D.clip(Shape)
)?Java:創建有洞的裁剪區域?
例如:一個直角R1減去另一個矩形R2中R1
我敢肯定,這有一個簡單的答案,但我畫一個空白。
Path2D.append()
+ EVEN_ODD纏繞規則似乎做的伎倆:
package com.example.test.gui;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Line2D;
import java.awt.geom.Path2D;
import java.awt.geom.Rectangle2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class HoleClipper extends JPanel
{
@Override protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
Rectangle2D r1 = getBounds();
int margin = 50;
Rectangle2D r2 = new Rectangle2D.Double(
r1.getMinX()+margin,
r1.getMinY()+margin,
r1.getWidth()-2*margin,
r1.getHeight()-2*margin);
g2d.setColor(Color.YELLOW);
g2d.fill(r1);
Path2D p = new Path2D.Double(Path2D.WIND_EVEN_ODD);
p.append(r1, false);
p.append(r2, false);
g2d.clip(p);
int spacing = 10;
g2d.setColor(Color.BLACK);
for (double d = 0; d < r1.getWidth() + r1.getHeight(); d += spacing)
{
Line2D line = new Line2D.Double(0, d, d, 0);
g2d.draw(line);
}
}
public static void main(String[] args) {
HoleClipper clipper = new HoleClipper();
clipper.setPreferredSize(new Dimension(300, 200));
JFrame frame = new JFrame("HoleClipper");
frame.setContentPane(clipper);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
GeneralPath
類是Shape
的實現,它可以表示帶有孔的形狀。您可以定義多個路徑段,其中一個代表「外部」,一個代表「洞」。使用GeneralPath
定義您想要的裁剪區域,然後致電clip()
。
看起來像這個不被Graphics的setClip支持。當我閱讀文檔的矩形是所有支持:
公共抽象無效setClip的(形夾)
將當前的剪貼區域設置爲任意的剪貼形狀。並非所有實現Shape接口的對象都可以用來設置剪輯。保證受支持的唯一Shape對象是通過getClip方法和Rectangle對象獲取的Shape對象。此方法設置用戶剪輯,該剪輯獨立於與設備邊界和窗口可見性關聯的剪輯。
不能保證工作,但它看起來像它 – 2011-06-08 15:12:58
我需要幫助,請你在我的代碼幫助。 – 2017-02-11 13:40:31