本人遇到了这样的一个问题:有两个程序,如下
package TankClient;import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;public class TestPaint  {

public void paint(Graphics g){
Color c = g.getColor();
g.setColor(Color.RED);
g.fillOval(50,50,30,30);
g.setColor(c);
}

public void launchFrame (){
Frame f = new Frame("tankwar");
f.setSize(800,600);
f.setLocation(150,200);
f.setResizable(false);
f.setVisible(true);
}
public static void main(String[] args){
new TestPaint().launchFrame();
}
}另外一个程序 是:
package TankClient;import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;public class TankClient extends Frame {
//定义窗口的宽和高,并把它们设为常量
private static final int WIDTH = 800;
private static final int HEIGHT = 600;

Tank myTank = new Tank(50,50);

public void paint(Graphics g){
System.out.println("ok");
Color c = g.getColor();
myTank.draw(g);
g.setColor(c);
}

//创建一个窗口,并实现关闭功能
public void launchFrame(){
setSize(WIDTH,HEIGHT);
setBackground(Color.BLACK);
setResizable(false);
setLocation(250,150);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
setVisible(true);
}



public static void main(String[] args){
new TankClient().launchFrame();
}
}
我想问的是为什么第一个程序不能在窗口里显示一个圆出来,而第二个却能呢,请高手指点迷津。

解决方案 »

  1.   

    第一个程序的paint()方法只是覆盖了Frame类里边的paint()方法(如果继承了Frame会自动调用次方法),由于你第一个程序里边没有继承Frame类这个paint()方法根本就运行不到
    建议在一般情况下,都用继承;不要自己写一个Frame
      

  2.   

    代码应该这样写:import java.awt.Color;
    import java.awt.Frame;
    import java.awt.Graphics;public class paintTest extends Frame {//Frame f = new Frame("tankwar");public void paint(Graphics g){
    Color c = g.getColor();
    g.setColor(Color.RED);
    g.fillOval(50,50,30,30);
    g.setColor(c);
    }public void launchFrame (){setSize(800,600);
    setLocation(150,200);
    setResizable(false);
    setVisible(true);
    }
    public static void main(String[] args){
    new paintTest().launchFrame();
    }
    }
      

  3.   

    把建的Frame对象去掉就可以啦,paint方法不是Frame自身的,而是继承Container的
      

  4.   

    你主要没有明白paint方法的用法。paint方法是Frame类继承Container类的,因此可以看作是它自己的方法。而你新建的TestPaint类没有继承Frame类,因此与Frame类没有丝毫关系,所以你写的paint方法只不过是个普通的方法,你都没有调用,怎么能被执行呢?要重写Frame类的方法,应该继承Frame啊。