RT

解决方案 »

  1.   

    Shape是接口 很多类(如Rectangle Arc2D Area等)实现了这个接口 示例化这些类可以进行填充或描边
    示例如下:
    import java.awt.*;
    import javax.swing.*;
    import java.awt.geom.*;public class Test extends JComponent
    {
        /** 起始角度和跨度 */
        int argstart = 45, argextent = 90;
        /** 中心坐标 */
        int x = 300, y = 200;
        /** 字符串位置 */
        int sx = 285, sy = 200;
        /** 小半径,大半径 */
        int rmin = 100, rmax = 150;
        public Test()
        {
            this.setSize(600,400);
            this.setPreferredSize(new Dimension(600,400));
        }    public void paint(Graphics g)
        {
            Graphics2D g2 = (Graphics2D)g;
            Arc2D pieArcmin = new Arc2D.Float(Arc2D.PIE);
            pieArcmin.setFrame(x-rmin, y-rmin, rmin*2, rmin*2);
            pieArcmin.setAngleStart(argstart);
            pieArcmin.setAngleExtent(argextent);
            Arc2D pieArcmax = new Arc2D.Float(Arc2D.PIE);
            pieArcmax.setFrame(x-rmax, y-rmax, rmax*2, rmax*2);
            pieArcmax.setAngleStart(argstart);
            pieArcmax.setAngleExtent(argextent);
            Area apieArcmin = new Area(pieArcmin);
            Area apieArcmax = new Area(pieArcmax);
            apieArcmax.subtract(apieArcmin);
            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            AffineTransform at = AffineTransform.getTranslateInstance(4, 6);
            g2.setColor(new Color(0,0,0,50));
            g2.fill(at.createTransformedShape(apieArcmax));
            g2.setColor(Color.red);
            g2.fill(apieArcmax);
            GradientPaint p = new GradientPaint(x-rmax, y-rmax, new Color(250,250,250), 
                                                x+rmax, y+rmax, new Color(250,250,250,100));
            g2.setPaint(p);
            g2.fill(apieArcmax);
            g2.setColor(Color.red);
            g2.draw(apieArcmax);
            g2.setColor(new Color(0,0,0,50));
            g2.drawString("COOL", sx+2, sy+2);
            g2.setColor(Color.black);
            g2.drawString("COOL", sx, sy);
            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
        }    public static void main(String[] args)
        {
            JFrame f = new JFrame();
            f.getContentPane().setLayout(new BorderLayout());
            f.getContentPane().add(new Test());
            f.pack();
            f.setVisible(true);
        }
    }
      

  2.   

    Shape 接口提供了表示一些几何形状的对象的定义。
    Shape 是由 PathIterator 对象描述的,它可以表示 Shape 的轮廓以及确定该轮廓如何将 2D 平面划分成内点和外点的规则。
    每个 Shape 对象都提供回调,以获取几何形状的边框,确定点或矩形是部分还是全部位于 Shape 内部,并检索一个描述 Shape
    轮廓的轨迹路径的 PathIterator 对象。 
    一般情况下我们不需要自己去实现Shape接口,在java.awt.geom 包中已经封装了大部分的几何图形类,
    非特殊情况下都可以满足需求。