package HUATU;
//创建一个绘图应用程序,随机地绘制线条、矩形和椭圆。
//为此,需要创建一组“灵活的”形状类。如果为这些类提供一个Graphics对象,
//将绘制位置告诉他们,他们就知道如何绘制自身。
//这些类的名字应为MyLine,MyRect和MyOval(提示:可有共同的父类MyShape)。
//使用随机数来挑选形状类型和形状的位置。
//画线,非填充
//一个文件来实现
import java.lang.*;
import java.util.*;
import java.awt.*;import java.io.*;
import javax.swing.*;
import java.awt.event.*;public class HUATU extends JPanel {
  Graphics g;
 
  HUATU()
  {       super();
 
    
    
  }
 public class Myshape{

public int x1,y1,x2,y2;

public  Myshape()
{
  return;
}

public  Myshape(int x1Coordinate, int y1Coordinate,int x2Coordinate, int y2Coordinate)
{
  setPoint(x1Coordinate, y1Coordinate,x2Coordinate, y2Coordinate);
}

public void setPoint( int x1Coordinate, int y1Coordinate, int x2Coordinate, int y2Coordinate )

 
  x1= x1Coordinate;
  y1= y1Coordinate;
  x2= x2Coordinate;
  y2= y2Coordinate;
}
public  int getX1()
{
  return x1;
}
public  int getY1()
{
return y1;
}
public  int getX2()
{
  return x2;
}
public  int getY2()
{
return y2;

  }
 public class Line extends Myshape{
     
      public  Line(){ return;}
      public  Line( int x1Coordinate, int y1Coordinate,int x2Coordinate,int y2Coordinate)
         {   
             super(x1Coordinate, y1Coordinate,x2Coordinate, y2Coordinate);
         // setLine( x1Coordinate, y1Coordinate,  x2Coordinate,  y2Coordinate);
         }
      public void  setLine(int x1Coordinate, int y1Coordinate, int x2Coordinate, int y2Coordinate){
          
           g.drawLine(x1, y1,x2, y2);// Coordinate
         } 
     
      } 
   
  public class Oval extends Myshape{ 
 
  public Oval(){return;}
   
  public  Oval (  int xCoordinate, int yCoordinate,int xRadius,int yRadius)
  {
    super(xCoordinate, yCoordinate, xRadius, yRadius);
   //setOval( xCoordinate,  yCoordinate,  xRadius,  yRadius);
  }
  public void  setOval(int xCoordinate, int yCoordinate, int xRadius, int yRadius){ 
     g.drawOval(x1,y1,x2,y2);
      
  }  
  }
  
  
  public class Rect extends  Myshape{
  
   public Rect(){ return;}
    
   public Rect(int x1Coordinate, int y1Coordinate, int x2Coordinate, int y2Coordinate ){
      super(x1Coordinate, y1Coordinate,x2Coordinate, y2Coordinate);
      //setRect( x1Coordinate,  y1Coordinate, x2Coordinate,  y2Coordinate);
      }
    public void  setRect(int x1Coordinate, int y1Coordinate,int x2Coordinate, int y2Coordinate){ 
     g.drawRect(x1,y1,x2,y2); 
     } 
  
   }
 public static void main(String argsp[])
{
 Random random = new Random();

 HUATU panel=new HUATU();
 JFrame application=new JFrame();
      application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
      application.setSize(600,600);
      application.add(panel);
      application.setVisible(true);

    int x1,y1,x2,y2,m;
    

    
 
   m=Math.abs(random.nextInt())%3+1;
   x1= Math.abs(random.nextInt())%255+1;
   y1= Math.abs(random.nextInt())%255+1;
   x2= Math.abs(random.nextInt())%255+1;
   y2= Math.abs(random.nextInt())%255+1;
    if(m==1)
    {
      Line myLine = panel.new Line(x1,y1,x2,y2);
     // Point p = new Point();
     myLine.setLine(x1,y1,x2,y2);
    
      
    }
    if(m==2)
    { 
      Oval myOval = panel.new Oval(x1,y1,x2,y2);
      //Point p = new Point();
      myOval.setOval(x1,y1,x2,y2);
      
    }
    if(m==3)
    { 
      Rect myRect = panel.new Rect(x1,y1,x2,y2);
      //Point p = new Point();
      myRect.setRect(x1,y1,x2,y2);
    } 

 
    
  
    
      
}

 
}

总是说对象传递不正确?

解决方案 »

  1.   

    内部类?? 你还是把内部类分开出来,这样你比较容易看清楚问题在哪    g.drawOval(x1,y1,x2,y2);
    这句很有问题。。
      

  2.   

    貌似是哪本教材上的内容吧
    Java大学教程?Big Java?忘了,前一段我看见过这个,你在这两本书上找找
      

  3.   

    g从来没有初始化啊!
    将g改为getGraphics()
      

  4.   

    public void paint(Graphics g){}