java paint()方法的小问题

编程自留地 2010-04-25 10:26:12
本人遇到了这样的一个问题:有两个程序,如下
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();
}
}
我想问的是为什么第一个程序不能在窗口里显示一个圆出来,而第二个却能呢,请高手指点迷津。
...全文
487 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xautswfc 2010-08-10
  • 打赏
  • 举报
回复
长见识了
superzhaohailiang 2010-04-25
  • 打赏
  • 举报
回复
你主要没有明白paint方法的用法。paint方法是Frame类继承Container类的,因此可以看作是它自己的方法。而你新建的TestPaint类没有继承Frame类,因此与Frame类没有丝毫关系,所以你写的paint方法只不过是个普通的方法,你都没有调用,怎么能被执行呢?要重写Frame类的方法,应该继承Frame啊。
superzhaohailiang 2010-04-25
  • 打赏
  • 举报
回复
把建的Frame对象去掉就可以啦,paint方法不是Frame自身的,而是继承Container的
superzhaohailiang 2010-04-25
  • 打赏
  • 举报
回复
代码应该这样写:

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();
}
}
chenluozhi 2010-04-25
  • 打赏
  • 举报
回复
第一个程序的paint()方法只是覆盖了Frame类里边的paint()方法(如果继承了Frame会自动调用次方法),由于你第一个程序里边没有继承Frame类。。。这个paint()方法根本就运行不到。。。
建议在一般情况下,都用继承;不要自己写一个Frame。。。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧