要在现有矩形图形上画个圆角出来,不是圆角矩形,不可以直接用fillRoundRect直接画,而是要在矩形的某个角化出圆角来,想法是先画出矩形,再在某个顶点画出圆角,没怎么碰过Graphics类,有熟悉的大虾指点一下吧,最好能有列子。

解决方案 »

  1.   

    直接在角上画个 1/4 圆(或椭圆)应该就基本满足你要求吧?用这个函数:
    drawArc(int x, int y, int width, int height, int startAngle, int arcAngle) 
      

  2.   

    这个似乎很有点难度了。你这不是画个圆角的问题,你是要把某个图的角做成透明的Java自带的能力恐怕不能实现你的要求,要么自己写段程序实现,要么得找找开源包了。
      

  3.   

    比如你想填充一个只有右下角为圆角的矩形: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.   

       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);
            }
        }
      

  5.   

    如果这样,alpha通道改为透明不就好了,可以做个矩形圆角的模板。