当前位置: 代码迷 >> J2SE >> 使用Graphics绘图简单例子有关问题
  详细解决方案

使用Graphics绘图简单例子有关问题

热度:31   发布时间:2016-04-24 00:23:14.0
使用Graphics绘图简单例子问题
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的例子

谢谢


------解决方案--------------------
java命名规范 cut首字母应该大写
paint方法不报错,实际原因是你Cut继承JFrame类,这个paint方法实际上是重写了paint方法,没有语法错误自然一切正常。
打开两句之后提示的指针异常是因为getGraphics()方法返回对象为null,然后你再调用paint方法的null对象的方法就报错

最后一个问题无法一两句话说清楚,repaint是UI图形有变化之后的重绘组件方法,paint是普通的绘图组件,这两者的功能设计目的不一样,update也是UI图形有变化后的重绘方法

你上面程序的paint重写是有问题的,需要添加一行命令

Java code
package csdn;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)    {        super.paint(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();    }}
  相关解决方案