使用Graphics绘图简单例子问题

importjava.awt.*;importjavax.swing.*;importjava.awt.event.*;publicclasscutextendsJFra... import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class cut extends JFrame
{
static JPanel panel = new JPanel();
static JButton but1 = new JButton("draw 圆");
static JButton but2 = new JButton("draw 椭圆");
static int circle = 0;
public cut()
{
setBounds(300, 200, 350, 370);
setLayout(new BorderLayout());
add(panel);
panel.setLayout(new FlowLayout());
panel.add(but1);
panel.add(but2);
setDefaultCloseOperation(3);
// Graphics g = getGraphics();
// paint(g);
setVisible(true);
}
public void paint(Graphics g)
{
g.drawString("花园或椭圆", 80, 80);
g.drawOval(70, 160, 70, 70);
g.drawOval(150, 160, 70, 90);
}
public static void main(String[] args)
{
new cut();
}
}

看了书上例子后我有很多不解,比如:
1、我把那两句注释了,没有了g,为什么paint函数不会报错,照样运行?
2、打开那两句后提示3处指针异常?
3、提示一个区别paint,repaint,update的例子
谢谢
展开
 我来答
鼻涕一米二
2012-07-31 · TA获得超过816个赞
知道小有建树答主
回答量:460
采纳率:100%
帮助的人:260万
展开全部
paint(g) ,一个回调方法,绝大多数时候组件的绘图逻辑都存储于这个方法中。awt系统会在适当的时候调用这个方法对组件进行绘图。容器在绘制的时候,容器的paint(g)方法默认会显示通知在容器中存在的所有visible为true的子组件进行绘制.

awt调用这个方法有2种形式。程序驱动方式和系统驱动方式。
在系统驱动的情况下(比如界面第一次显示组件),系统会判断组件的显示区域,然后向事件分发线程发出调用paint(g)的命令.
程序驱动则由外部的程序调用repaint()方法提出一个异步请求.repaint方法会调用update(g)法,update方法在默认情况下简单调用paint(g)方法.从而绘制组件.

一般不提倡将组件的具体绘制逻辑放到paint(g)之外,也不提倡程序直接调用paint(g)方法.需要注意的是,由于程序驱动方式是由程序来负责组件的绘制,所以repaint方法拥有几个重载方法.传入绘制区域,由程序决定组件的绘制区域.

update(g)方法.在awt的重量级组件上,update是一个很重要的方法.在外部程序调用repaint的时候,都会调用到update.程序员通过继承重量级组件,覆盖这个update方法.可以实现自己的绘图逻辑,典型的用法是重新绘制组件需要改变的的一部份而不是全部(增量绘图).
//以上为引用网友
你重新frame的paint方法 并调用
setVisible(true);,明显是系统驱动方式来绘制图形,是不需要手动实例化Graphics 对象和手动调用paint方法的,系统会自动调用。
bangbangmiao
2012-08-01 · 超过32用户采纳过TA的回答
知道答主
回答量:199
采纳率:0%
帮助的人:91.3万
展开全部
非标准答案:
1、
paint函数里那个括号里有个局部变量Graphics g看到了吗?重载paint函数后awt系统会在适当的时候调用这个方法对组件进行绘图
2、
3处指针异常? 什么异常,就在运行的时候会报nullException错,说g为null,正常,因为awt里控件JFrame没有graphics,你调用的getGraphics是继承自它的父类compe..那个东西的,所以为空,只能用paint里自带的Graphics
3、
上面那个人讲的很清楚了已经。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式