Java 二维图形要在现有矩形图形上画个圆角出来,不是圆角矩形,不可以直接用fillRoundRect直接画,而是要在矩
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个矩形的拼接结果
[解决办法]
private static final class ImagePanel extends JPanel {
private static final long serialVersionUID = -243434343L;
private final Rectangle2D.Double rect;
private final Rectangle2D.Double square;
private final Ellipse2D.Double circle;
public ImagePanel() {
rect = new Rectangle2D.Double(0, 0, 600, 400);
square = new Rectangle2D.Double(50, 50, 150, 150);
circle = new Ellipse2D.Double(50, 50, 300, 300);
}
@Override
public Dimension getPreferredSize() {
return (new Dimension(600, 400));
}
@Override
public void paintComponent(final Graphics g) {
final Graphics2D g2d = (Graphics2D) g;
g2d.setPaint(Color.CYAN);
g2d.fill(rect);
g2d.setClip(square);
g2d.setPaint(Color.RED);
g2d.fill(circle);
}
}[解决办法]
这个…… 我还是不是很明白楼主到底是什么意思,是直角已经画上去了,现在要擦掉么?
[解决办法]
如果这样,alpha通道改为透明不就好了,可以做个矩形圆角的模板。
