[Java GUI] 简易Java绘图程序实例

来源:互联网 发布:直接下订单的网站源码 编辑:程序博客网 时间:2024/04/30 11:09

本例演示了如何响应鼠标动作来实现绘图,为使重绘时原先信息不丢失,使用了Vector<T>类来保存所绘制的各条曲线,其中curve对象用于保存每条曲线,而curves对象保存所有绘制的独立曲线。

import java.awt.Color;import java.awt.Container;import java.awt.Dimension;import java.awt.Graphics;import java.awt.Point;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.MouseMotionListener;import java.util.Vector;import javax.swing.JFrame;import javax.swing.JPanel;public class MyPaint {public static void main(String[] args) {new PaintFrame( "JavaPainter" );}}class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {private Vector<Point> curve;private Vector<Vector<Point>> curves;private Point ptFrom = new Point();private Point ptTo = new Point();MyCanvas() {curve = new Vector<Point>();curves = new Vector<Vector<Point>>();this.setPreferredSize(new Dimension(300, 200));this.addMouseListener( this );this.addMouseMotionListener( this );}public void paintComponent( Graphics g ) {g.setColor( Color.RED );for( Vector<Point> points : curves ) {Point pt0 = points.get( 0 );for( int i = 1; i < points.size(); ++i ) {Point pt = points.get( i );g.drawLine(pt0.x, pt0.y, pt.x, pt.y);pt0 = pt;}}}@Overridepublic void mousePressed(MouseEvent e) {ptFrom.x = e.getX();ptFrom.y = e.getY();curve.add( (Point) ptFrom.clone() );}@Overridepublic void mouseReleased(MouseEvent e) {ptTo.x = e.getX();ptTo.y = e.getY();curve.add( (Point) ptTo.clone() );curves.add( new Vector<Point>( curve ) );curve.clear();}@Overridepublic void mouseDragged(MouseEvent e) {ptTo.x = e.getX();ptTo.y = e.getY();curve.add( ( Point )ptTo.clone() );Graphics g = getGraphics();g.setColor(Color.RED);g.drawLine( ptFrom.x, ptFrom.y, ptTo.x, ptTo.y );ptFrom.x = ptTo.x;ptFrom.y = ptTo.y;}@Overridepublic void mouseEntered(MouseEvent e) {// do nothing}@Overridepublic void mouseExited(MouseEvent e) {// do nothing}@Overridepublic void mouseClicked(MouseEvent e) {// do nothing}@Overridepublic void mouseMoved(MouseEvent e) {// do nothing}}class PaintFrame extends JFrame {private MyCanvas canvas = new MyCanvas();PaintFrame( String title ) {super( title );Container cp = getContentPane();cp.add(canvas);setSize(300, 200);setVisible(true);}}


原创粉丝点击