求助……类的绘图无效? what you have said is not right I have just tried your codes in JBX, but everything goes well. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我只是绘制图片 img,但是在主类中的任何位置都可以绘制成功,而从类不行 :(static Graphics g;静态变量应该是固定吧虽然可以吧绘图放在主类,但这样就不像是面向对象了 Graphics是abstract类,你那么申明有什么用啊????对于Graphics这种,系统的唯一资源。必须由系统调度,不可能让你随便生成地。。你只能把系统生成的传递给你自己的绘图函数哦。例如你可以重写paint(Graphics g){ 载这里把g传递过去。} 在每次用到graphics对象的时候都应该向系统请求一个新的,底层的原因我不知道,不过以前我遇到过graphcis类型变量失效的情况也就是我把一个放了很长时间的graphics变量拿出来画图,结果没有反应.据我猜想失效的原因是,虽然我用g = graphics;将其保留了下来,但是系统内部可以对我所拿的graphics变量进行了处理,从此它不再是有效的,真正原因还望高手解答.一个graphics类型的变量大小有3K之多,所以API中有关graphics.dispose();的函数说明中说 推荐你在用完了graphcis对象之后手动调用dispose();函数,以释放不需要再占用的内存. 虽然你可以依赖垃圾收集去释放内存,但是在JVM 调用垃圾处理程序之前,这些无用的废料会一直占用大量的内存. 但是在组件的paint(Graphics g)函数内不需要手动调用dispose,因为系统会自动调用.以上这些说明清楚地告诉我们,我们应该在每次绘图以前调用getGraphics()得到一个新的graphics变量,绘图完成后立刻dispose掉.而不是把这个graphics对象保存起来,每次均调用它绘图. 但是我把你的代码放到JBX下运行了,结果一切正常啊,所有要显示的东西都能正常显示.不知道为什么. 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 没有用 找到问题了,原来是 构造函数前我加了一个 void,晕啊!!我学 java 还不到半个月,碰到这种怪怪的问题太多了。 只要与socket有关的都异常,代码决对正确,大神来啊 高手帮忙看一段js代码,漂浮图片的 值类型,引用类型 疑惑String 解析字符串问题!在线等!(关于replace) 如何用二进制位来做标识 请问这样的查询有什么问题? 兄弟们帮帮我 郁闷了,散分! 火急!!!原来在jdk1.3下做的程序在jdk1.4下运行出现乱码问题? 如何让表格jtable的头部能够在点击后有排序功能? java 作图的问题(Graphics2D drawString()) 哪里有ECLIPSE的API文档,我只在网上早到在线的,我需要可以下载的
static Graphics g;静态变量应该是固定吧
虽然可以吧绘图放在主类,但这样就不像是面向对象了
载这里把g传递过去。
}
底层的原因我不知道,不过以前我遇到过graphcis类型变量失效的情况
也就是我把一个放了很长时间的graphics变量拿出来画图,结果没有反应.据我猜想失效的原因是,虽然我用g = graphics;将其保留了下来,
但是系统内部可以对我所拿的graphics变量进行了处理,从此它不再是有效的,真正原因还望高手解答.一个graphics类型的变量大小有3K之多,所以API中有关graphics.dispose();的函数说明中说
推荐你在用完了graphcis对象之后手动调用dispose();函数,以释放不需要再占用的内存.
虽然你可以依赖垃圾收集去释放内存,但是在JVM 调用垃圾处理程序之前,这些无用的废料会一直占用大量的内存.
但是在组件的paint(Graphics g)函数内不需要手动调用dispose,因为系统会自动调用.
以上这些说明清楚地告诉我们,我们应该在每次绘图以前调用getGraphics()得到一个新的graphics变量,绘图完成后立刻dispose掉.而不是把这个graphics对象保存起来,每次均调用它绘图.
不知道为什么.
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 没有用
我学 java 还不到半个月,碰到这种怪怪的问题太多了。