要在现有矩形图形上画个圆角出来,不是圆角矩形,不可以直接用fillRoundRect直接画,而是要在矩形的某个角化出圆角来,想法是先画出矩形,再在某个顶点画出圆角,没怎么碰过Graphics类,有熟悉的大虾指点一下吧,最好能有列子。这个 需要拼接 圆形 和矩形的拼接 其实是 4个圆和 5个矩形的拼接结果比如你想填充一个只有右下角为圆角的矩形:
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);
}
}
恐怕不是你想的这样,我理解楼的需求是:
本来已经有个图形了(也许是张图片),现在要把四个边角变成圆形;这有点像加了个像框,但是这个像框不能挡住背景;所以我觉得楼主的本质需求是要把四个边角透明化掉。
不过也没见楼主现身说法下。。。