在Java中着色时排除区域

时间:2013-12-19 22:35:42

标签: java swing awt paintcomponent

我有一个图形对象,我想为除了一些矩形之外的所有区域着色。例如,

enter image description here

除了这些黑色区域外,我想为所有区域着色。我能这样做吗?图像中可以有很多矩形。

1 个答案:

答案 0 :(得分:2)

我建议你用White颜色填充所有区域,然后在其上绘制Black矩形,因为绘制带孔的图形更简单。例如下一个:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.List;

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

public class DrawExample extends JPanel{
    List<Rectangle> rctangles = new ArrayList<>();

    public static void main(String[] args)  {

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        DrawExample drawExample = new DrawExample();
        drawExample.addRect(new Rectangle(20,20,25,25));
        drawExample.addRect(new Rectangle(50,50,25,25));
        frame.add(drawExample);
        frame.setSize(200,200);
        frame.setVisible(true);

    }

    private void addRect(Rectangle rectangle) {
        rctangles.add(rectangle);
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, getWidth(), getHeight());
        g.setColor(Color.BLACK);
        for(Rectangle r : rctangles){
            g.fillRect(r.x, r.y, r.width,r.height);
        }
    }

}

enter image description here