A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 杨宗彬 于 2012-8-3 16:39 编辑

package com.yzb.GUI;

import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class DrawImage extends Frame {

        /**
         * @param args
         */
                public DrawImage(String n){
                        super(n);
                        
                        addWindowListener(new WindowAdapter(){
                                @Override
                                public void windowClosing(WindowEvent e) {
                                        // TODO Auto-generated method stub
                                        super.windowClosing(e);
                                        dispose();
                                        System.exit(0);
                                }
                        });
                }
               
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                DrawImage di = new DrawImage("DrawImage");
                Image img = di.getToolkit().getImage("I:\\图片\\7_5006e8dbb35c9.jpg");
                Graphics g = di.getGraphics();
                di.setSize(500, 500);
                di.setVisible(true);
                while(!g.drawImage(img, 0, 0, di));
        }

}
如果把上面那两行代码写成:di.getGraphics().drawImage(img,0,0,di);就能实现  为什么?
程序报空指针的异常。貌似是没拿到画笔,怎么回事?

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

1 个回复

倒序浏览
Graphics 类下面不都是用坐标来操作的吗?
觉得你所谓的笔,其实从操作习惯上来说,也就是鼠标。
那么就需要定义鼠标事件,觉得光是有一个frame是不够的,至少还要定义一个panel,其实自己也不清楚,但是就是觉得只有frame是不足的。
其他的可以给与建议。
鼠标事件的定义
其他的一些事件并没有复写,其实我也不知道这样做是否能实现,自己也想这样弄过,但是一直没做...
  1. frame.addMouseListener(new MouseListener() {
  2.                         
  3.                         @Override
  4.                         public void mouseClicked(MouseEvent e) {
  5.                                 // TODO Auto-generated method stub

  6.                         }

  7.                         @Override
  8.                         //这个是鼠标在组件上面按下时,触发的事件。我们在此处获取到一个坐标。
  9.                         public void mousePressed(MouseEvent e) {        
  10.                                 X_1 = e.getX();
  11.                                 Y_1 = e.getY();
  12.                                 
  13.                         }

  14.                         @Override
  15.                         //这个是鼠标在组件上释放时,触发的事件。我们在此获取到第二个坐标
  16.                         public void mouseReleased(MouseEvent e) {
  17.                                 X_2 = e.getX();
  18.                                 Y_2 = e.getY();
  19.                                 //将两个坐标交给Graphics类的drawLine方法。这样就可以在两点之间画出一条直线了。
  20.                                 //两处获取到的坐标都是相对于组件的坐标,而不是屏幕上的绝对坐标。
  21.                                 g.drawLine(X_1,X_2,X_2,Y_2);
  22.                         }

  23.                         @Override
  24.                         public void mouseEntered(MouseEvent e) {
  25.                                 // TODO Auto-generated method stub
  26.                                 
  27.                         }

  28.                         @Override
  29.                         public void mouseExited(MouseEvent e) {
  30.                                 // TODO Auto-generated method stub
  31.                                 
  32.                         }

  33.                         
  34.                 });
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马