刚才我看了一朋友设计的贪吃蛇代码,自己也试验了一下发现有个地方不明白,希望高人指点一下
我没有调用过paint()方法可程序运行时候自己却好像调用了,具体代码如下,文本框组件是用来测试paint()方法的
import java.awt.*;
import javax.swing.*;
public class Fram extends JFrame{
JPanel panel;
Rectangle food;
JTextField txtTemp=new JTextField();
public Fram(){
this.setTitle("食物测试");
setSize(400,400);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
food=new Rectangle(100,200,10,10);
panel=(JPanel)getContentPane();
panel.setLayout(null);
panel.add(txtTemp);
txtTemp.setBounds(200,200,80,20);
}
/**
*为什么我没有调用过paint()方法但这个方法也被实现了呢?
*该方法不是static啊
*希望高手可以为小弟指点一二
*/
public void paint(Graphics g)
{
super.paint(g);
g.setColor(Color.RED);
g.fillRect(food.x,food.y,food.width,food.height);
txtTemp.setText("color");
}
public static void main(String [] args){
new Fram();
}
}
----------------解决方案--------------------------------------------------------
这个方法就是自己调用的吧 我是这么想的
----------------解决方案--------------------------------------------------------
这个方法是自己调用的~
----------------解决方案--------------------------------------------------------
拿JAVA中要这种可以自己调用的方法叫什么啊,怎么定义他呢如果我自己也想写个自己可以调用的函数
----------------解决方案--------------------------------------------------------
这是个很普通的方法的很普通的用法啊
public class Test {
public void sayWords(String words){
System.out.println("You say:"+words);
}
public Test(){
this.sayWords("vlinux");
}
public static void main(String args[]){
new Test();
}
}
这样我的Test类不就自己调用了sayWords这个方法了么?有什么疑问?
----------------解决方案--------------------------------------------------------
参照Thread类的run()方法,它也是自动调用的,看看java是如何设计的!
----------------解决方案--------------------------------------------------------
回五楼
也许你看错了吧,我并没在构造里调用paint()啊,你的方法是在构造里调用啊
----------------解决方案--------------------------------------------------------
同问,我也有这个疑问?
----------------解决方案--------------------------------------------------------
汗啊,白写了啊,你再仔细运行看看你的程序,有什么细微的异常?
看看那红色的方框和文本框中的color到底是什么时候才出现的!!
----------------解决方案--------------------------------------------------------
算了,我还是说穿了吧
paint不是显示调用的,而是隐式调用。
最好的证据:
你在一开始运行的时候,文本框的color和那红色的方框并不是马上就出现的。那是为什么呢?很简单,那是因为paint()方法更本就没有被调用。那怎么才能调用呢?
也是很简单,你把你的程序最小化在恢复,就会出来了。为什么?那是因为当你的程序界面被遮挡的时候,JAVA会隐式的调用paint()方法。这个时候你把color删除掉,再最小化,再恢复,color又回来了。为什么?因为paint方法再次被隐式整用。
----------------解决方案--------------------------------------------------------