import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
public class G1P1 extends JFrame{
//设置游戏屏幕大小
final int WIDTH = 900, HEIGHT = 650;
//设置跑道
//通过构造方法设置JFrame
public G1P1(){
super("跑道!");
setSize(WIDTH/9*10,HEIGHT/9*10);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public void paint(Graphics g){
super.paint(g);
g.setColor(Color.white);
g.fillRect(0, 0, WIDTH, HEIGHT);
g.setColor(Color.DARK_GRAY);
}
public static void main(String[] args){
//这里为什么不创建一个对象Graphics h = new Graphics();然后调用paint(h);
new G1P1();
}
}
在public void paint(Graphics g)处看不懂!为什么不用创建一个Graphics对象,而直接用参数g进行操作,g 只是Graphics的引用别名啊 !
6 个解决方案
#1
我不清楚楼主要问什么,你问的paint方法为什么不创建对象,但是代码里面明明是在main函数里面的,澄清一下?
如果是问paint方法里面的,你自己创建一个Graphics对象是没有任何意义的,因为你想要获得的是已经创建对象的Graphics而你自己创建一个Graphics没有任何信息,除非你把参数列表的g复制给你自己创建的对象,这个跟不创建没任何区别
你搞清楚,参数列表里面的g是有你已经写的程序代码各种实现的内部信息,你自己创建一个Graphics是啥也没有的
如果是问paint方法里面的,你自己创建一个Graphics对象是没有任何意义的,因为你想要获得的是已经创建对象的Graphics而你自己创建一个Graphics没有任何信息,除非你把参数列表的g复制给你自己创建的对象,这个跟不创建没任何区别
你搞清楚,参数列表里面的g是有你已经写的程序代码各种实现的内部信息,你自己创建一个Graphics是啥也没有的
#2
嗯,就是public void paint(Graphics g)那个g只是个参数而已,main函数中也没创建一个Graphics实例化对象
,比如如果你定义一个方法:public void fun(Person g){
g.name = Mike;
}
在主方法调用fun时,必须创建一个实例化一个p才行啊:
public static void main(){
Persom p = new Person();
fun(p);
}
,比如如果你定义一个方法:public void fun(Person g){
g.name = Mike;
}
在主方法调用fun时,必须创建一个实例化一个p才行啊:
public static void main(){
Persom p = new Person();
fun(p);
}
#3
调用paint的代码都在父类中 你无需关心这个Graphics哪里来的
#4
这个 Graphics 对象来自对应的控件
控件的 Graphics 对象可以通过 getGraphics 方法获得
在 update 事件调用各个控件的 update 方法时
会把控件的 Graphics 对象作为参数传进去
之后 update 方法又调用 paint 方法
将该 Graphics 对象继续传递过去
就是这样的过程
控件的 Graphics 对象可以通过 getGraphics 方法获得
在 update 事件调用各个控件的 update 方法时
会把控件的 Graphics 对象作为参数传进去
之后 update 方法又调用 paint 方法
将该 Graphics 对象继续传递过去
就是这样的过程
#5
可以使用的
这里不是什么别名,这个g是他的一个引用对象.
这里不是什么别名,这个g是他的一个引用对象.
#6
嗯,看了sunyiz的解释,貌似有点懂了,java基础学了,我不知道学的怎么样,想编写小游戏实战一下,我该继续学哪方面的知识呢?
#1
我不清楚楼主要问什么,你问的paint方法为什么不创建对象,但是代码里面明明是在main函数里面的,澄清一下?
如果是问paint方法里面的,你自己创建一个Graphics对象是没有任何意义的,因为你想要获得的是已经创建对象的Graphics而你自己创建一个Graphics没有任何信息,除非你把参数列表的g复制给你自己创建的对象,这个跟不创建没任何区别
你搞清楚,参数列表里面的g是有你已经写的程序代码各种实现的内部信息,你自己创建一个Graphics是啥也没有的
如果是问paint方法里面的,你自己创建一个Graphics对象是没有任何意义的,因为你想要获得的是已经创建对象的Graphics而你自己创建一个Graphics没有任何信息,除非你把参数列表的g复制给你自己创建的对象,这个跟不创建没任何区别
你搞清楚,参数列表里面的g是有你已经写的程序代码各种实现的内部信息,你自己创建一个Graphics是啥也没有的
#2
嗯,就是public void paint(Graphics g)那个g只是个参数而已,main函数中也没创建一个Graphics实例化对象
,比如如果你定义一个方法:public void fun(Person g){
g.name = Mike;
}
在主方法调用fun时,必须创建一个实例化一个p才行啊:
public static void main(){
Persom p = new Person();
fun(p);
}
,比如如果你定义一个方法:public void fun(Person g){
g.name = Mike;
}
在主方法调用fun时,必须创建一个实例化一个p才行啊:
public static void main(){
Persom p = new Person();
fun(p);
}
#3
调用paint的代码都在父类中 你无需关心这个Graphics哪里来的
#4
这个 Graphics 对象来自对应的控件
控件的 Graphics 对象可以通过 getGraphics 方法获得
在 update 事件调用各个控件的 update 方法时
会把控件的 Graphics 对象作为参数传进去
之后 update 方法又调用 paint 方法
将该 Graphics 对象继续传递过去
就是这样的过程
控件的 Graphics 对象可以通过 getGraphics 方法获得
在 update 事件调用各个控件的 update 方法时
会把控件的 Graphics 对象作为参数传进去
之后 update 方法又调用 paint 方法
将该 Graphics 对象继续传递过去
就是这样的过程
#5
可以使用的
这里不是什么别名,这个g是他的一个引用对象.
这里不是什么别名,这个g是他的一个引用对象.
#6
嗯,看了sunyiz的解释,貌似有点懂了,java基础学了,我不知道学的怎么样,想编写小游戏实战一下,我该继续学哪方面的知识呢?