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

[Java GUI] 简易Java绘图程序实例_第1张图片

本例演示了如何响应鼠标动作来实现绘图,为使重绘时原先信息不丢失,使用了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;
			}
		}
	}

	@Override
	public void mousePressed(MouseEvent e) {
		ptFrom.x = e.getX();
		ptFrom.y = e.getY();
		curve.add( (Point) ptFrom.clone() );
	}

	@Override
	public 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();
	}

	@Override
	public 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;
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		// do nothing
	}

	@Override
	public void mouseExited(MouseEvent e) {
		// do nothing
	}

	@Override
	public void mouseClicked(MouseEvent e) {
		// do nothing
	}

	@Override
	public 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);
	}
}


你可能感兴趣的:(java,String,Class,import)