32 areaOne.add(areaTwo);
33 Graphics2D g2 = (Graphics2D)g;
34 g2.setPaint(Color.orange);
35 g2.fill(areaOne);
36 g2.setPaint(Color.black);
37 g2.draw(areaOne);
38 //2. 以subtract的方式组合两个Area,并绘制在JPanel的右上角
39 Shape sThree = new Ellipse2D.Double(40 + getWidth()/2, 20, 80, 80);
40 Shape sFour = new Rectangle2D.Double(60 + getWidth()/2, 40, 80, 80);
41 Area areaThree = new Area(sThree);
42 Area areaFour = new Area(sFour);
43 areaThree.subtract(areaFour);
44 g2.setPaint(Color.orange);
45 g2.fill(areaThree);
46 g2.setPaint(Color.black);
47 g2.draw(areaThree);
48 //3. 以intersect的方式组合两个Area,并绘制在JPanel的左下角
49 Shape sFive = new Ellipse2D.Double(40, 20 + getHeight()/2, 80, 80);
50 Shape sSix = new Rectangle2D.Double(60, 40 + getHeight()/2, 80, 80);
51 Area areaFive = new Area(sFive);
52 Area areaSix = new Area(sSix);
53 areaFive.intersect(areaSix);
54 g2.setPaint(Color.orange);
55 g2.fill(areaFive);
56 g2.setPaint(Color.black);
57 g2.draw(areaFive);
58 //4. 以exclusiveOr的方式组合两个Area,并绘制在JPanel的右下角
59 Shape sSeven = new Ellipse2D.Double(40 + getWidth()/2, 20 + getHeight()/2, 80, 80);
60 Shape sEight = new Rectangle2D.Double(60 + getWidth()/2, 40 + getHeight()/2, 80, 80);
61 Area areaSeven = new Area(sSeven);
62 Area areaEight = new Area(sEight);
63 areaSeven.exclusiveOr(areaEight);
64 g2.setPaint(Color.orange);
65 g2.fill(areaSeven);
66 g2.setPaint(Color.black);
67 g2.draw(areaSeven);
68 }
69 }
3. 笔划(Strokes):
Graphics2D类的draw操作通过使用当前选定的笔划来绘制一个形状的边界。在默认情况下,笔划是一条宽度为1像素的实线。可以通过setStroke方法来选定不同的笔划。这里我们可以通过使用Java 2D已经提供的BasicStroke类来帮助我们实现自定义笔划的功能。
1) 设置笔划的宽度,缺省为一个像素;
2) 当宽度为多个像素时,需要设置笔划的端头采用何种风格绘制:平头样式、圆头样式、方头样式,如果两条线相交时,采用何种方式的交叉风格:斜连接、园连接和斜肩连接;
3) 设置虚线笔划的dash模式。
见以下示例:
1 public class MyTest extends JPanel {
2 public static void main(String args[]) {
3 JFrame f = new JFrame("Strokes Demo");
4 f.setSize(600, 600);
5 f.add(new MyTest());
6 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
7 f.setLocationRelativeTo(null);
8 f.setVisible(true);
9 }
10 public MyTest() {
11 setBackground(Color.white);
12 setForeground(Color.white);
13 }
14 @Override
15 public void paintComponent(Graphics g) {
16 super.paintComponent(g);
17 g.setColor(Color.red);
18 g.drawLine(0, getHeight()/3, getWidth(), getHeight()/3);
19 g.drawLine(0, getHeight() * 2 /3, getWidth(), getHeight() * 2/3);
20 paintThickStroke(g);
21 paintGradientStroke(g);
22 paintDashPatternStroke(g);
23 }
24 //绘制指定宽度的笔划
25 private void paintThickStroke(Graphics g) {
26