永发信息网

Graphics 画图问题

答案:2  悬赏:30  手机版
解决时间 2021-02-23 09:03
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Test{

public static void main(String[] args) {
JFrame f = new JFrame();
JPanel p = new JPanel();

Graphics g = p.getGraphics();
g.drawRect(100, 100, 100, 100);

f.add(p);
f.setSize(300,300);
f.setVisible(true);
}
}
报空指针异常错误
Exception in thread "main" java.lang.NullPointerException
at frame.Test.main(Test.java:15)

帮助我改成功!!!谢谢
最佳答案
这个是初学者很常见的问题,多写程序就会注意到了。

先跟你讲一下怎么会出错的:
getGraphics() 这个方法返回组件的 Graphics 对象,前提是它得有 Graphics 对象,不是 new 了 JPanel 就立马会有 Graphics 对象的,因为你还没设置它应该出现的区域,它没办法显示出来(Graphics 对象其实就是这个显示区域,显示不出来 Graphics 对象就是空的,于是出现了你的 NullPointerException 错误)。

(你如果去掉中间那两句以后运行的话你会发现根本看不到 JPanel(当然 JPanel 上不加东西或者不改背景色或者不加边框总是看不见的,你可以试试其它的,像 JButton 之类的,都是一样的)。)

于是解决办法是在 Graphics g = p.getGraphics(); 上面加上:
f.setBounds(100, 100, 300, 300);
这样就可以了。(swing 默认是 BorderLayout 的,也就是如果底层容器上就一个组件,那个组件不用设置显示区域,会自动铺满底层容器。具体请参考 JDK 的布局管理 LayoutManager 和 BorderLayout 的说明)。

------------------------------------------------
希望你耐心、仔细地看完了。
全部回答
最大化图形消失的问题也解决了,注意类名首字母大写 import java.awt.*; import java.awt.event.*; import java.util.arraylist; import javax.swing.*; public class map { public static void main(string[] args) { new draw(); } } class draw extends jframe{ arraylist<point> points = new arraylist<point>(); jpanel p=new jpanel(); draw(){ add(p,borderlayout.center); p.addmouselistener(new mymouse()); this.addwindowstatelistener(new mywindow()); this.setresizable(true); validate(); setbounds(50,50,500,400); setvisible(true); } public void paint (graphics g){ for(int i = 0;i<points.size();i++){ g.filloval(points.get(i).x, points.get(i).y, 30, 30); } } private class mywindow implements windowstatelistener{ public void windowstatechanged(windowevent arg0) { repaint(); } } private class mymouse extends mouseadapter{ public void mouseclicked(mouseevent e) { points.add(e.getpoint()); repaint(); } } }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
更何况的意思
奥语和粤语?一个语言吗?
电工预埋线管与水暖下水管的距离有没有规定
求太子妃升职记电视剧百度网盘
百畅电子设备厂地址在什么地方,想过去办事
ATM卡都是通用的吗?
喝完酒第二天 就会拉肚子
点悟心理咨询地址有知道的么?有点事想过去
揽胜星脉和宝马5系GT哪个好
对于等效平衡的疑问
手动档汽车提示电压高是怎么回事?
英语翻译你真的不用那么说,该感谢的是我们,收
新金龙装饰工程有限公司地址在哪,我要去那里
什么样的手机在韩国能使用
武进市吉安电子电器厂这个地址在什么地方,我
推荐资讯
三星i9103的介绍
oppo A100左上角 有个黄色信息小图标 图标的
春雨滋养万物200字作文
为什哦赢在人脉总是注册失败呢
解锁用英文念什么
如图为人体上肢骨骼肌的模式图,当我们双手处
桃花源别墅二十三区5幢怎么去啊,有知道地址
安徽男人取哪里老婆好?
一艘轮船从甲港网乙港,因顺水每小时行25千米,
(-13)×三分之二-0.34×七分之二+(-13)×三
"唱"字开头的成语
朋友啊朋友莫要叹息人生孤单是什么歌
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?