日期:2014-05-20  浏览次数:20656 次

Java 二维图形
要在现有矩形图形上画个圆角出来,不是圆角矩形,不可以直接用fillRoundRect直接画,而是要在矩形的某个角化出圆角来,想法是先画出矩形,再在某个顶点画出圆角,没怎么碰过Graphics类,有熟悉的大虾指点一下吧,最好能有列子。
------解决方案--------------------
比如你想填充一个只有右下角为圆角的矩形:



import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.geom.Area;
import java.awt.geom.RoundRectangle2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;


/**
 *
 * @date   26/10/2012
 */
public class TestRoundCorner extends JPanel {
  
  public static void main(String[] args) {
    
    SwingUtilities.invokeLater(new Runnable() {

      @Override
      public void run() {
        
        JFrame f = new JFrame("Test Rectangle Round Corner ");
        
        f.setContentPane(new TestRoundCorner());
        f.setSize(800, 600);
        f.setLocationRelativeTo(null);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
      }
    });
  }
  
  int padding = 50;
  int r = 50;
  
  @Override
  public void paintComponent(Graphics g) {
    
    super.paintComponent(g);
    
    Rectangle rec = getBounds();
    rec.x += padding;
    rec.y += padding;
    
    rec.width -= padding * 2;
    rec.height -= padding * 2;
    
    RoundRectangle2D roundRec = new RoundRectangle2D.Double(
            rec.x - r, rec.y - r, 
            rec.width + r, rec.height + r, r, r);
    
    @SuppressWarnings("unchecked")
    Graphics2D gg = (Graphics2D)g;
    
    gg.setColor(Color.BLUE);
    Area area = new Area(rec);
    area.intersect(new Area(roundRec));
    gg.fill(area);
  }
}

------解决方案--------------------
引用:
比如你想填充一个只有右下角为圆角的矩形:


恐怕不是你想的这样,我理解楼的需求是:
 本来已经有个图形了(也许是张图片),现在要把四个边角变成圆形;这有点像加了个像框,但是这个像框不能挡住背景;所以我觉得楼主的本质需求是要把四个边角透明化掉。

不过也没见楼主现身说法下。。。
------解决方案--------------------
这个 需要拼接 圆形 和矩形的拼接 其实是 4个圆和 5个矩形的拼接结果