startPoint.x=endPoint.x-startPoint.x;
endPoint.y-startPoint.y=startPoint.y

解决方案 »

  1.   

    沒有問題吧
    是不是因為有endPoint.x<startPoint.x這樣的情況
      

  2.   

    首先:调试程序是否运行到该case里
    其次:看看两个点的坐标有没有问题
      

  3.   

    全部程序在这里了!
    ------------
    import java.applet.*;
    import java.awt.*;
    import java.awt.event.*;
    public class MyApplet extends Applet implements MouseListener,MouseMotionListener,ActionListener{ private Point startPoint,endPoint;
     private final int line=1;
     private final int rectangle=2;
     private final int circle=3; private int shape=0;
     private boolean blClear=false; private CheckboxGroup groupTypes,groupColors,groupFill;
     private Checkbox typeLine,typeRectangle,typeCircle;
     private Checkbox colorRed,colorGreen,colorBlue,colorPink,colorYellow;
     private Checkbox fill,notfill; private Button btnClear; public MyApplet()
    {
     super();
    }
     public void init(){
      addMouseListener(this);
      addMouseMotionListener(this);  btnClear=new Button("Clear");  groupTypes=new CheckboxGroup();
      groupColors=new CheckboxGroup();
      groupFill=new CheckboxGroup();  typeLine=new Checkbox("Line");
      typeRectangle=new Checkbox("Recangle");
      typeCircle=new Checkbox("Circle");
      typeLine.setCheckboxGroup(groupTypes);
      typeRectangle.setCheckboxGroup(groupTypes);
      typeCircle.setCheckboxGroup(groupTypes);  colorRed=new Checkbox("Red");
      colorGreen=new Checkbox("Green");
      colorBlue=new Checkbox("Blue");
      colorPink=new Checkbox("Pink");
      colorYellow=new Checkbox("Yellow");
      colorRed.setCheckboxGroup(groupColors);
      colorGreen.setCheckboxGroup(groupColors);
      colorBlue.setCheckboxGroup(groupColors);
      colorPink.setCheckboxGroup(groupColors);
      colorYellow.setCheckboxGroup(groupColors);  fill=new Checkbox("Fill");
      notfill=new Checkbox("Not fill");
      fill.setCheckboxGroup(groupFill);
      notfill.setCheckboxGroup(groupFill);  groupTypes.setSelectedCheckbox(typeLine);
      groupTypes.setSelectedCheckbox(colorBlue);
      groupTypes.setSelectedCheckbox(notfill);  typeLine.addMouseListener(this);
      typeRectangle.addMouseListener(this);
      typeCircle.addMouseListener(this);
      btnClear.addActionListener(this);
      colorRed.addMouseListener(this);
      colorGreen.addMouseListener(this);
      colorPink.addMouseListener(this);
      colorYellow.addMouseListener(this);
      fill.addMouseListener(this);  add(typeLine);
      add(typeRectangle);
      add(typeCircle);
      add(btnClear);
      add(fill);
      add(notfill);
      add(colorRed);
      add(colorGreen);
      add(colorBlue);
      add(colorPink);
      add(colorYellow);
     }
      public void paint(Graphics g){
      g.setColor(getCurrentColor());
      int currentType=getCurrentType();
      if(startPoint!=null && endPoint!=null && blClear==false){
       switch(currentType){
         case line:
          g.drawLine(startPoint.x,startPoint.y,endPoint.x,endPoint.y) ;
          break;
         case rectangle:
          checkPoints();
          if (!getFillStatus()){
            g.drawRect(startPoint.x,startPoint.y,endPoint.x-startPoint.x,endPoint.y-startPoint.y);
           }
           else{
            g.fillRect(startPoint.x,startPoint.y,endPoint.x-startPoint.x,endPoint.y-startPoint.y);
          }
           break;
          case circle:
           checkPoints();
           if(!getFillStatus()){
             g.drawArc(startPoint.x,startPoint.y,endPoint.x-startPoint.x,endPoint.y-startPoint.y,0,360);
               }
            else{
              g.fillArc(startPoint.x,startPoint.y,endPoint.x-startPoint.x,endPoint.y-startPoint.y,0,360);
           }
             break;
           }
     }
       blClear=false;
     }
      private void checkPoints(){
       Point temp;
       if(startPoint.x>endPoint.x){
         temp=startPoint;
         startPoint=endPoint;
         endPoint=temp;
         temp=null;
       }
     }private Color getCurrentColor(){
     Color currentColor=Color.blue;
     Checkbox selectedColor=groupColors.getSelectedCheckbox();
     if(selectedColor!=null){
       String lblColor=selectedColor.getLabel();
       if(lblColor.equals("Red")){
         currentColor=Color.red;
       }
       else if(lblColor.equals("Green")){
         currentColor=Color.green;
       }
       else if(lblColor.equals("Blue")){
         currentColor=Color.blue;
       }
       else if(lblColor.equals("Pink")){
         currentColor=Color.pink;
       }
       else if(lblColor.equals("Yellow")){
         currentColor=Color.yellow;
      }
     }
      return currentColor;
      }  public boolean getFillStatus(){
        boolean blFill=false;
        Checkbox selectedFill=groupFill.getSelectedCheckbox();
        if(selectedFill!=null){
         String lblColor=selectedFill.getLabel();
         if(lblColor.equals("Fill")){
          blFill=true;
         }
        }
        return blFill;
      }  private int getCurrentType(){
      int currentType=line;
      Checkbox selectedType=groupTypes.getSelectedCheckbox();
      if(selectedType!=null){
        String lblType=selectedType.getLabel();
        if(lblType.equals("Line")){
         currentType=line;
       }
        else if(lblType.equals("Circle")){
         currentType=circle;
        }
        else{
         currentType=line;
        }
      }
        return currentType;
      }
      public void mousePressed(MouseEvent e){
       startPoint=e.getPoint();
      }  public void mouseReleased(MouseEvent e){
       endPoint=e.getPoint();
       paint(this.getGraphics());
      }  public void mouseClicked(MouseEvent e){
      }  public void mouseDragged(MouseEvent e){
      }  public void mouseMoved(MouseEvent e)  {
      }  public void mouseEntered(MouseEvent e){
      }  public void mouseExited(MouseEvent e){
      }  public void actionPerformed(ActionEvent e){
       blClear=true;
       repaint();
      }
    }
      

  4.   

    if(lblType.equals("Line")){
         currentType=line;
       }
        else if(lblType.equals("Circle")){
         currentType=circle;
        }
        else{
         currentType=line;
        }
      }
        return currentType;
      }
    這一段里,你並沒有返回rectangle
    是不是   else{
         currentType=line;
        }
    要改為
       else{
         currentType=rectangle;
        }