java AWT实现画图功能

来源:互联网 发布:v sql cs statistics 编辑:程序博客网 时间:2024/05/17 08:27
package javaAWT;import java.awt.Canvas;import java.awt.Color;import java.awt.Dimension;import java.awt.Frame;import java.awt.Graphics;import java.awt.MenuItem;import java.awt.PopupMenu;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.MouseMotionAdapter;import java.awt.event.MouseMotionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.awt.event.WindowListener;import java.awt.image.BufferedImage;import java.lang.ProcessBuilder.Redirect;import java.security.KeyStore.PrivateKeyEntry;public class HandDraw {    // 画图区的宽度,高度。    private final int AREA_WIDTH = 600;    private final int AREA_HEIGHT = 500;    // 上一次鼠标坐标    private int preX = -1;    private int preY = -1;    // 右键菜单用于设置画笔颜色    PopupMenu popupMenu = new PopupMenu();    MenuItem readItem = new MenuItem("Red");    MenuItem greenItem = new MenuItem("Green");    MenuItem blueItem = new MenuItem("Blue");    // 定义一个BufferedImage 对象    BufferedImage bufferedImage = new BufferedImage(AREA_WIDTH, AREA_HEIGHT, BufferedImage.TYPE_INT_BGR);    // 获取bufferedImage对象的Graphics    Graphics graphics = bufferedImage.getGraphics();    private Frame frame = new Frame("HandDraw");    private DrawCanvas drawCanvas = new DrawCanvas();    private Color foreColor = new Color(255,0,0);    public void init() {        frame.addWindowListener(new WindowAdapter() {            @Override            public void windowClosing(WindowEvent e) {                // TODO Auto-generated method stub                super.windowClosing(e);                System.exit(0);            }        });        // 定义右键菜单的事件监听器        ActionListener menuListener = new ActionListener() {            @Override            public void actionPerformed(ActionEvent e) {                // TODO Auto-generated method stub                if (e.getActionCommand().equals("Red")) {                    foreColor = new Color(255, 0, 0);                }                if (e.getActionCommand().equals("Green")) {                    foreColor = new Color(0,255,0);                }                if (e.getActionCommand().equals("Blue")) {                    foreColor = new Color(0, 0, 255);                }            }        };        // 为三个菜单添加事件监听器        readItem.addActionListener(menuListener);        greenItem.addActionListener(menuListener);        blueItem.addActionListener(menuListener);        // 将菜单组合成右键菜单        popupMenu.add(readItem);        popupMenu.add(greenItem);        popupMenu.add(blueItem);        // 将右键菜单添加到drawCanvas对象中        drawCanvas.add(popupMenu);        // 将bufferedImage对象的背景埴充白色        graphics.fillRect(0, 0, AREA_WIDTH, AREA_HEIGHT);        drawCanvas.setPreferredSize(new Dimension(AREA_WIDTH, AREA_HEIGHT));        // 监听鼠标称动事件        drawCanvas.addMouseMotionListener(new MouseMotionAdapter() {                @Override            public void mouseDragged(MouseEvent e) {                // TODO Auto-generated method stub                // 如果preX和preY大于                if (preX > 0 && preY > 0) {                    // 设置当前颜色                    graphics.setColor(foreColor);                    // 绘制从上一次到本次鼠标称动线段                    graphics.drawLine(preX, preY, e.getX(), e.getY());                }                // 将保存当前鼠标位置                 preX = e.getX();                preY = e.getY();                System.out.println("preX:" + preX +"  preY:" + preY);                // 重绘drawCanvas对象                drawCanvas.repaint();            }        });        // drawCanvas添加鼠标事件        drawCanvas.addMouseListener(new MouseAdapter() {            @Override            public void mouseReleased(MouseEvent e) {                // TODO Auto-generated method stub                super.mouseReleased(e);                // 弹出右键菜单                if (e.isPopupTrigger()) {                    popupMenu.show(drawCanvas, e.getX(), e.getY());                }                // 松开鼠标键时设置上一次的坐标为-1;                preX = -1;                preY = -1;            }        });        frame.add(drawCanvas);        frame.pack();        frame.setVisible(true);    }    class DrawCanvas extends Canvas {        @Override        // 重定paint方法实现绘图        public void paint(Graphics g) {            // TODO Auto-generated method stub            super.paint(g);            // 将bufferedImage绘制到该组件上            g.drawImage(bufferedImage, 0, 0, null);        }    }    public static void main(String[] args) {        new HandDraw().init();    }}

这里写图片描述

原创粉丝点击