import java.awt.*; import java.awt.geom.*; import javax.swing.JPanel; public class AreaClipTestPanel extends JPanel { //Eclipseの場合、シリアライズ可能クラスでこれがないと警告が出る private static final long serialVersionUID=0; // Image image; //描画タイプ指定 int paintType; // int areaNum; Area areas[]; // public AreaClipTestPanel(Image img){ image=img; // paintType=0; areas=new Area[5]; //各Area作成 areas[0]=makeArea00(); areas[1]=makeArea01(); areas[2]=makeArea02(); areas[3]=makeArea03(); areas[4]=makeArea04(); } public void setPaintParam(int pt,int an){ paintType=pt; areaNum=an; } // public void paintComponent(Graphics g){ super.paintComponent(g); // Graphics2D g2=(Graphics2D)g; // switch(paintType){ case 0: //none(何もしない) g.drawImage(image,0,0,this); break; case 1: //fill(塗りつぶす) g.drawImage(image,0,0,this); g2.fill(areas[areaNum]); break; case 2: //draw(輪郭) g.drawImage(image,0,0,this); g2.draw(areas[areaNum]); break; case 3: //clipping(描画領域指定) g.setClip(areas[areaNum]); g.drawImage(image,0,0,this); break; } } //各Area作成 private Area makeArea00(){ //円弧の実験 Area ret=new Area(); Area tmp; // tmp=new Area(new Arc2D.Double(100,100,100,100,0,240,Arc2D.CHORD)); ret.add(tmp); tmp=new Area(new Arc2D.Double(250,100,100,100,0,240,Arc2D.OPEN)); ret.add(tmp); tmp=new Area(new Arc2D.Double(400,100,100,100,0,240,Arc2D.PIE)); ret.add(tmp); tmp=new Area(new Arc2D.Double(100,250,100,100,0,180,Arc2D.CHORD)); ret.add(tmp); tmp=new Area(new Arc2D.Double(250,250,100,100,0,180,Arc2D.OPEN)); ret.add(tmp); tmp=new Area(new Arc2D.Double(400,250,100,100,0,180,Arc2D.PIE)); ret.add(tmp); tmp=new Area(new Arc2D.Double(100,400,100,100,0,120,Arc2D.CHORD)); ret.add(tmp); tmp=new Area(new Arc2D.Double(250,400,100,100,0,120,Arc2D.OPEN)); ret.add(tmp); tmp=new Area(new Arc2D.Double(400,400,100,100,0,120,Arc2D.PIE)); ret.add(tmp); // return ret; } private Area makeArea01(){ //楕円の実験 Area ret=new Area(); Area tmp; // tmp=new Area(new Ellipse2D.Double(100,100,100,100)); ret.add(tmp); tmp=new Area(new Ellipse2D.Double(250,100,150,200)); ret.add(tmp); tmp=new Area(new Ellipse2D.Double(450,100,200,100)); ret.add(tmp); // return ret; } private Area makeArea02(){ //四角・角丸四角の実験 Area ret=new Area(); Area tmp; // tmp=new Area(new Rectangle2D.Double(50,100,100,200)); ret.add(tmp); tmp=new Area(new RoundRectangle2D.Double(200,100,100,200,50,50)); ret.add(tmp); tmp=new Area(new RoundRectangle2D.Double(350,100,100,200,50,100)); ret.add(tmp); tmp=new Area(new RoundRectangle2D.Double(500,100,100,200,100,50)); ret.add(tmp); // return ret; } private Area makeArea03(){ //混ぜてみるその1 Area ret=new Area(); Area tmp; // tmp=new Area(new Ellipse2D.Double(150,75,300,300)); ret.add(tmp); tmp=new Area(new Rectangle2D.Double(75,150,450,150)); ret.add(tmp); tmp=new Area(new Ellipse2D.Double(225,150,150,150)); ret.subtract(tmp); // // return ret; } private Area makeArea04(){ //混ぜてみるその2 Area ret=new Area(); Area tmp; // tmp=new Area(new Polygon(new int[]{100-20,400-20,400+20,100+20},new int[]{100+20,400+20,400-20,100-20},4)); ret.add(tmp); tmp=new Area(new Polygon(new int[]{100+20,400+20,400-20,100-20},new int[]{400+20,100+20,100-20,400-20},4)); ret.add(tmp); tmp=new Area(new Ellipse2D.Double(100-50,100-50,50*2,50*2)); ret.add(tmp); tmp=new Area(new Ellipse2D.Double(100-50,400-50,50*2,50*2)); ret.add(tmp); tmp=new Area(new Ellipse2D.Double(400-50,100-50,50*2,50*2)); ret.add(tmp); tmp=new Area(new Ellipse2D.Double(400-50,400-50,50*2,50*2)); ret.add(tmp); tmp=new Area(new Ellipse2D.Double(100-25,100-25,50,50)); ret.subtract(tmp); tmp=new Area(new Ellipse2D.Double(100-25,400-25,25*2,25*2)); ret.subtract(tmp); tmp=new Area(new Ellipse2D.Double(400-25,100-25,25*2,25*2)); ret.subtract(tmp); tmp=new Area(new Ellipse2D.Double(400-25,400-25,25*2,25*2)); ret.subtract(tmp); tmp=new Area(new Rectangle2D.Double(250-10,250-50,10*2,50*2)); ret.subtract(tmp); tmp=new Area(new Rectangle2D.Double(250-50,250-10,50*2,10*2)); ret.subtract(tmp); // return ret; } }