求助……类的绘图无效?

o光o 2004-03-14 02:03:26
class One{
static Graphics g;
paint(){
g.drawString("g",100,100);//无效,一个点都没有出现
}
}

class Fly extends java.applet.Applet{
Image img;
Graphics gBuffer;
One one;
init(){
img=createImage(300, 300);
gBuffer=img.getGraphics();
One.g=gBuffer
one=new One();
One.g.drawString("one.g",100,50);// 有效
one.paint();//无效,一个点都没有出现 :(
}
paint(Graphics g){
g.drawImage(img,0,0,this);
}
}
程序大概就是这样的。
无论 class one 是内部类还是外部类,g 是静态变量还是普通变量都是这个样子
难道只有在主类中绘图才有效吗?望各位帮帮我。
...全文
42 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
o光o 2004-03-17
  • 打赏
  • 举报
回复
找到问题了,原来是 构造函数前我加了一个 void,晕啊!!
我学 java 还不到半个月,碰到这种怪怪的问题太多了。
o光o 2004-03-16
  • 打赏
  • 举报
回复
class One{
static Graphics g;
     static Image img; //加了这一句
paint(){
g=img.getGraphics();//加了这一句
g.drawString("g",100,100);
}
}
class Fly extends java.applet.Applet{
Image img;
Graphics gBuffer;
One one;
init(){
img=createImage(300, 300);
gBuffer=img.getGraphics();
One.g=gBuffer; //加了这一句
One.img=img;
one=new One();
One.g.drawString("one.g",100,50);// 有效
one.paint();//无效,一个点都没有出现 :(
}
paint(Graphics g){
g.drawImage(img,0,0,this);
}
}
但还是没有用,我用的是 sdk 1.4.2,winXP.p3,384M的内存,是不是对java的配置不对?


我是对 Image img 操作,传递参数g 没有用

zhang21cnboy 2004-03-15
  • 打赏
  • 举报
回复
Graphics是abstract类,你那么申明有什么用啊????

对于Graphics这种,系统的唯一资源。必须由系统调度,不可能让你随便生成地。。

你只能把系统生成的传递给你自己的绘图函数哦。

例如你可以重写paint(Graphics g){
载这里把g传递过去。
}
o光o 2004-03-15
  • 打赏
  • 举报
回复
我只是绘制图片 img,但是在主类中的任何位置都可以绘制成功,而从类不行 :(
static Graphics g;静态变量应该是固定吧
虽然可以吧绘图放在主类,但这样就不像是面向对象了
oneonone 2004-03-15
  • 打赏
  • 举报
回复
但是我把你的代码放到JBX下运行了,结果一切正常啊,所有要显示的东西都能正常显示.
不知道为什么.
oneonone 2004-03-15
  • 打赏
  • 举报
回复
在每次用到graphics对象的时候都应该向系统请求一个新的,
底层的原因我不知道,不过以前我遇到过graphcis类型变量失效的情况
也就是我把一个放了很长时间的graphics变量拿出来画图,结果没有反应.

据我猜想失效的原因是,虽然我用g = graphics;将其保留了下来,
但是系统内部可以对我所拿的graphics变量进行了处理,从此它不再是有效的,真正原因还望高手解答.

一个graphics类型的变量大小有3K之多,所以API中有关graphics.dispose();的函数说明中说
推荐你在用完了graphcis对象之后手动调用dispose();函数,以释放不需要再占用的内存.
虽然你可以依赖垃圾收集去释放内存,但是在JVM 调用垃圾处理程序之前,这些无用的废料会一直占用大量的内存.
但是在组件的paint(Graphics g)函数内不需要手动调用dispose,因为系统会自动调用.


以上这些说明清楚地告诉我们,我们应该在每次绘图以前调用getGraphics()得到一个新的graphics变量,绘图完成后立刻dispose掉.而不是把这个graphics对象保存起来,每次均调用它绘图.
m1923 2004-03-14
  • 打赏
  • 举报
回复
关注
oneonone 2004-03-14
  • 打赏
  • 举报
回复
what you have said is not right
I have just tried your codes in JBX, but everything goes well.
hui3zhihui 2004-03-14
  • 打赏
  • 举报
回复
你可以看以下api
oneonone 2004-03-14
  • 打赏
  • 举报
回复
g对象随时产生,随时实效
你只能在每次需要绘图时得到新的
才能绘图成功。

62,628

社区成员

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

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