解决方案 »

  1.   


    画出阴影效果 贴图怎么弄呢 ?  g2d.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, observer)  ?
      

  2.   

    代码实现方法package swing;import java.awt.BorderLayout;
    import java.awt.Canvas;
    import java.awt.Color;
    import java.awt.Container;
    import java.awt.Graphics;
    import java.awt.Shape;
    import java.awt.Window.Type;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.geom.Ellipse2D;import javax.swing.Box;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;public class chart {
    public static void main(String[] args){
    JFrame f= new JFrame("BoxLayout 演示程序");
    f.setBounds(80, 60, 300, 230);
    f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    f.setState(2);
    f.setVisible(true);
    int SIZE = 3;
    MyCanvas mc = new MyCanvas();
    f.add(mc);
    }
    }class MyCanvas extends Canvas{
    public void paint(Graphics g)
    {
    g.setColor(Color.red);
    g.setPaintMode();
    int iHeight=100;
    int iWidth=100;
    int ix=10;
    int iy=10;
    iHeight = 100; Ellipse2D s = new Ellipse2D.Float(ix, iy, iWidth, iHeight);
    g.drawOval(s.getBounds().x, s.getBounds().y, s.getBounds().width, s.getBounds().height);
    int x1, y1;
    int iPer=18;
    for(x1 = ix; x1<(ix+iWidth); x1++) {
    for(y1=(iy+iHeight); y1>(iy+(iHeight-iPer)); y1--) {
    if(s.intersects(x1, y1, 1, 1))
    g.drawLine(x1, y1, x1, y1);
    }
    }
    g.drawString((" "+iPer+"%"), 120, 60);
    }
    }
      

  3.   

    原理可以利用clip来剪切绘制区域
    效果图:
    import javax.swing.*;
    import java.awt.*;
    import java.awt.geom.*;public class Test extends JPanel {
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);        Graphics2D g2d = (Graphics2D) g;
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            g2d.translate(50, 50);        g2d.setColor(Color.GRAY);
            g2d.fillOval(0, 0, 100, 100);        g2d.setColor(Color.WHITE);
            g2d.fillOval(10, 10, 80, 80);        Ellipse2D oval = new Ellipse2D.Double(10, 10, 80, 80);
            g2d.clip(oval);        g2d.setColor(Color.GREEN);
            g2d.fillRect(0, 60, 100, 100);
        }    public static void main(String[] args) {
            JFrame frame = new JFrame();        frame.getContentPane().add(new Test());        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(500, 500);
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        }
    }
      

  4.   

    画圆弧还可以用更高级的技术:AlphaComposite
    直观的效果图,从Qt文档里截图的,Java的效果也是一样的
    Java文档里AlphaComposite的常量