你可以用锥子夹。您需要知道要排除的矩形的边界,以及绘图区域的外部边界。
下面的演示代码打开一个框架,并在其中显示一个面板。面板的绘制方法设置了一个示例剪辑,该剪辑看起来像一个中间有一个矩形孔的矩形,而实际上它是一个描述要排除区域周围区域的多边形。剪辑矩形应该由排除矩形的边界和绘图区域的外边缘组成,但我保留了硬编码的值,以使其保持简单并更好地说明工作(我希望!)
+-------------------+
| clip drawing area |
+---+-----------+ |
| | excluded | |
| | area | |
| +-----------+ |
| |
+-------------------+
该方法的优点在于,它可以避免所有的awt绘制都进入排除区域。我不知道这对你是否有用。
然后我的演示在整个区域绘制一个黑色矩形,并在其中画一条白色的对角线,以说明剪辑的效果。
public class StackOverflow extends JFrame {
public static void main(String[] args) {
new StackOverflow();
}
private StackOverflow() {
setTitle( "Clip with a hole" );
setSize( 320,300 );
getContentPane().add( new ClipPanel() );
setVisible( true );
}
}
class ClipPanel extends JPanel {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Polygon clip = new Polygon(
new int[]{ 0, 100, 100, 0, 0, 20, 20, 80, 80, 0 },
new int[]{ 0, 0, 60, 60, 20, 20, 40, 40, 20, 20 },
10
);
g.setClip(clip);
g.setColor( Color.BLACK );
g.fillRect( 0,0,100,60 );
g.setColor( Color.WHITE );
g.drawLine( 0,0,100,60 );
}
}