使用Java Graphics进行内部剪辑

前端之家收集整理的这篇文章主要介绍了使用Java Graphics进行内部剪辑前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要使用 java.awt.Graphis绘制一条线,但是只能渲染位于矩形之外的线的部分.

是否可以使用图形裁剪支持

或者我需要计算交叉点,自己剪裁线?

解决方法

您需要使用 Area类.这个例子将演示如何做你所要求的:
  1. import java.awt.BorderLayout;
  2. import java.awt.Color;
  3. import java.awt.Dimension;
  4. import java.awt.Graphics;
  5. import java.awt.Graphics2D;
  6. import java.awt.geom.Area;
  7. import java.awt.geom.Rectangle2D;
  8.  
  9. import javax.swing.JFrame;
  10. import javax.swing.JPanel;
  11.  
  12.  
  13. public class Test extends JPanel {
  14.  
  15. public static void main(String[] args) {
  16. JFrame f = new JFrame();
  17. Test t = new Test();
  18. f.getContentPane().setLayout(new BorderLayout());
  19. f.getContentPane().add(t,BorderLayout.CENTER);
  20. f.pack();
  21. f.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
  22. f.setVisible(true);
  23. }
  24.  
  25. public Test() {
  26. setPreferredSize(new Dimension(300,300));
  27. }
  28.  
  29. public void paintComponent(Graphics g) {
  30. Graphics2D g2 = (Graphics2D)g.create();
  31. Rectangle2D rectangleNotToDrawIn = new Rectangle2D.Double(100,100,20,30);
  32. Area outside = calculateRectOutside(rectangleNotToDrawIn);
  33. g2.setPaint(Color.white);
  34. g2.fillRect(0,getWidth(),getHeight());
  35. g2.setPaint(Color.black);
  36. g2.setClip(outside);
  37. g2.drawLine(0,getHeight());
  38.  
  39. }
  40.  
  41.  
  42. private Area calculateRectOutside(Rectangle2D r) {
  43. Area outside = new Area(new Rectangle2D.Double(0,getHeight()));
  44. outside.subtract(new Area(r));
  45. return outside;
  46. }
  47.  
  48. }

猜你在找的Java相关文章