Step By Step(Java 2D图形篇<一>) (七)

2014-11-24 03:21:36 · 作者: · 浏览: 3
(sTwo);

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