Applet的一个绘图板

/*用Applet做的一个会图板但是不知道为什么在画圆和方的时候,原来画好的图形会改变位置

如果谁能帮我一下 十分感激!

希望高手能在这留言赐教!

*/

 

import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Checkbox;
import java.awt.CheckboxGroup;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;
public class TestOne extends Applet {
 
 String str="我爱你中国,我的家在北京!";
 int x1,y1,x2,y2,currentshape=ShapeParam.line;
 Color c=Color.black;
 CheckboxGroup cbg = new CheckboxGroup();
 CheckboxGroup shapecbg=new CheckboxGroup();
    ArrayList<ShapeParam> shapeparams=new ArrayList<ShapeParam>();
 
 @Override
 public void destroy() {
  System.out.println("destroy");
 }

 @Override
 public void init() {
  Button btn1=new Button("清屏");
  Label lab1=new Label("ControlGroup");
  btn1.setBackground(Color.LIGHT_GRAY);
  
  Panel pcolor=new Panel();
  Panel pshape=new Panel();
  
  
  pcolor.setLayout(new GridLayout(2, 3));
   
   Checkbox cb1=new Checkbox("Black", cbg, true);
   Checkbox cb2=new Checkbox("Red", cbg, false);
   Checkbox cb3=new Checkbox("Blue", cbg, false);
   
   
   Checkbox shapecb1=new Checkbox("线",shapecbg,true);
   Checkbox shapecb2=new Checkbox("圆",shapecbg,false);
   Checkbox shapecb3=new Checkbox("方",shapecbg,false);
   
   
   
   
   pcolor.add(cb1);
   pcolor.add(cb2);
   pcolor.add(cb3);
   
  pcolor.add(lab1);
  
  
   

  pcolor.add(shapecb1);
  pcolor.add(shapecb2);
   pcolor.add(shapecb3);
   
   pcolor.add(btn1);
   
   

 

  
   pcolor.setBackground(Color.LIGHT_GRAY);
   pshape.setBackground(Color.LIGHT_GRAY);
  
 
  
  
   this.add(pcolor,BorderLayout.CENTER);
  
   
  
  btn1.addActionListener(new Btn1Action());
  
  
  
  this.addMouseListener(new MouseAdapter(){

  

  @Override
  public void mousePressed(MouseEvent e) {
   x1=e.getX();
   y1=e.getY();
   
   
  }
  

 

   @Override
   public void mouseReleased(MouseEvent e) {
    shapeparams.add(new ShapeParam(x1,y1,x2,y2,c,currentshape));
    

    

   }
   
   
   
  });

  this.setSize(400,400);
  
  
  
  
  this.addMouseMotionListener(new MousePain(){
   
   
  });
  
  
  
  
 }

 @Override
 public void start() {
  
 }

 @Override
 public void stop() {
  
 }

 @Override
 public void paint(Graphics g) {
  
     int xx=x1;
     int yy=y1;
     if(x1>x2)xx=x2;
     if(y1>y2)yy=y2;
  drawshape();
  g.setColor(c);
  changecolor(g);
  changeshape();
  
  
  
  if(x1==0 &&x2==0 && y1==0 && y2==0 )return;
  
  if(currentshape==ShapeParam.line)
  {
  
  g.drawLine(x1, y1, x2, y2);
  }
  if(currentshape==ShapeParam.rec)
  {
  
  g.draw3DRect(xx, yy, Math.abs(x1-x2), Math.abs(y1-y2), true);
  }
  if(currentshape==ShapeParam.oval)
  {
  
   g.drawOval(xx, yy, Math.abs(x1-x2), Math.abs(y1-y2));
  }
  
  
  
 }
 
 private void changeshape() {
  if(shapecbg.getSelectedCheckbox().getLabel()=="线")currentshape=ShapeParam.line;
  if(shapecbg.getSelectedCheckbox().getLabel()=="方")currentshape=ShapeParam.rec;
  if(shapecbg.getSelectedCheckbox().getLabel()=="圆")currentshape=ShapeParam.oval;
   
 }

 private void changecolor(Graphics g) {
  if(cbg.getSelectedCheckbox().getLabel()=="Blue")
      {g.setColor(c=Color.blue);return;}
  if(cbg.getSelectedCheckbox().getLabel()=="Red")
      {g.setColor(c=Color.red);return;}
  if(cbg.getSelectedCheckbox().getLabel()=="Black")
      {g.setColor(c=Color.black);return;}
  
 }

 private void drawshape() {
  
      int dx;
      int dy;
      Graphics g=this.getGraphics();
      
      
  for(int i=0;i<shapeparams.size();i++){
   
   
   ShapeParam sp=shapeparams.get(i);
   
   //System.out.println(sp.toString());
   dx=sp.x1;
   dy=sp.x2;
   if(sp.x1>sp.x2)dx=sp.x2;
      if(sp.y1>sp.y2)dy=sp.y2;
   
   if(sp.shape==ShapeParam.line)
   {g.setColor(sp.c);
   
   g.drawLine(sp.x1, sp.y1, sp.x2, sp.y2);
   System.out.println("l");
   }
   if(sp.shape==ShapeParam.rec)
   {g.setColor(sp.c);
   
   g.draw3DRect(dx, dy, Math.abs(sp.x1-sp.x2), Math.abs(sp.y1-sp.y2), true);
   System.out.println("r");
   }
   if(sp.shape==ShapeParam.oval)
   {g.setColor(sp.c);
   
   g.drawOval(dx, dy, Math.abs(sp.x1-sp.x2), Math.abs(sp.y1-sp.y2));
   System.out.println("o");
   }
   
   
   
   
  }
  
 }

 class Btn1Action implements ActionListener{

  public void actionPerformed(ActionEvent arg0) {
   
   x1=x2=y1=y2=0;
   
   shapeparams.removeAll(shapeparams);
   
   TestOne.this.repaint();
   
  }
   
 }
 class MousePain implements MouseMotionListener {

  public void mouseDragged(MouseEvent e) {
   
   TestOne.this.x2=e.getX();
   TestOne.this.y2=e.getY();
   
  
   
   TestOne.this.repaint();
   
   
  }

  public void mouseMoved(MouseEvent e) {
   
   
  }
  
  
  
 } 
 
 class ShapeParam{
  static final int line=0;
  static final int rec=1;
  static final int oval=2;
  
  int x1=0;
  int y1=0;
  int x2=0;
  int y2=0;
  int shape;
  
  
  Color c;
  public ShapeParam(int x1,int y1,int x2,int y2,Color c,int shape){
   this.x1=x1;
   this.y1=y1;
   this.x2=x2;
   this.y2=y2;
   this.c=c;
   this.shape=shape;
  }
  
  public String toString(){
   return String.valueOf(x1)+"  "+x2+"  "+y1+"  "+y2+"  "+shape;
  }
 }
 
}

//<applet code="TestOne.class" width=400 height=400>

//</applet>




你可能感兴趣的:(java,C++,c,C#)