public Canvas (Image background) { this.background = background; AmouseListener al = new AmouseListener(); this.addMouseListener( al ); this.addMouseMotionListener( al ); }
//所有的作画操作在这里 protected void paintComponent( Graphics g ) { super.paintComponent( g ); g.setColor( Color.WHITE ); if( background != null ) { int iWidth = background.getWidth( this ); int iHeight = background.getHeight( this ); g.drawImage( background, 0, 0, iWidth, iHeight, this ); }else { g.fillRect( 0, 0, this.getWidth(), this.getHeight() ); } g.setColor( Color.RED ); Graphics2D g2 = (Graphics2D)g; for(int i=0;i<shapes.size();i++) { g2.draw( shapes.get( i ) ); }
//监听鼠标事件的监听器 class AmouseListener extends MouseAdapter{ private Point start = null; private Point end = null;
public void mousePressed( MouseEvent e ) { start = e.getPoint(); } public void mouseReleased( MouseEvent e ) { end = e.getPoint(); shapes.add( getRect( start, end ) ); Canvas.this.repaint(); }
private Rectangle getRect(Point p1, Point p2) { int x1 = (int) p1.getX(); int y1 = (int) p1.getY(); int x2 = (int) p2.getX(); int y2 = (int) p2.getY(); int x = Math.min( x1, x2 ); int y = Math.min( y1, y2 ); int w = Math.abs( x1 - x2 ); int h = Math.abs( y1 - y2 ); Rectangle rt = new Rectangle(x,y,w,h); return rt; } public void mouseDragged( MouseEvent e ) { Rectangle rt = getRect( start, e.getPoint() ); Canvas.this.tmp = rt; Canvas.this.repaint(); } } }
你可以先运行下看看,然后在看代码,不是很复杂:import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;import javax.swing.JFrame;
import javax.swing.JPanel;
//这就是一个窗口
public class Paint extends JFrame{
public static void main( String[] args ) {
new Paint();
}
public Paint() {
getContentPane().add( new Canvas(null), BorderLayout.CENTER );
setDefaultCloseOperation( EXIT_ON_CLOSE );
setSize(500,600);
setLocationRelativeTo( null );
setVisible(true);
}
}//这个类充当了一个画板的角色
class Canvas extends JPanel{
private List<Shape> shapes = new ArrayList<Shape>();
private Image background = null;
private Shape tmp = null;
public Canvas (Image background) {
this.background = background;
AmouseListener al = new AmouseListener();
this.addMouseListener( al );
this.addMouseMotionListener( al );
}
//所有的作画操作在这里
protected void paintComponent( Graphics g ) {
super.paintComponent( g );
g.setColor( Color.WHITE );
if( background != null ) {
int iWidth = background.getWidth( this );
int iHeight = background.getHeight( this );
g.drawImage( background, 0, 0, iWidth, iHeight, this );
}else {
g.fillRect( 0, 0, this.getWidth(), this.getHeight() );
}
g.setColor( Color.RED );
Graphics2D g2 = (Graphics2D)g;
for(int i=0;i<shapes.size();i++) {
g2.draw( shapes.get( i ) );
}
if( tmp != null ) {
g2.setColor( Color.BLUE );
g2.draw( tmp );
tmp = null;
}
}
//监听鼠标事件的监听器
class AmouseListener extends MouseAdapter{
private Point start = null;
private Point end = null;
public void mousePressed( MouseEvent e ) {
start = e.getPoint();
} public void mouseReleased( MouseEvent e ) {
end = e.getPoint();
shapes.add( getRect( start, end ) );
Canvas.this.repaint();
}
private Rectangle getRect(Point p1, Point p2) {
int x1 = (int) p1.getX();
int y1 = (int) p1.getY();
int x2 = (int) p2.getX();
int y2 = (int) p2.getY();
int x = Math.min( x1, x2 );
int y = Math.min( y1, y2 );
int w = Math.abs( x1 - x2 );
int h = Math.abs( y1 - y2 );
Rectangle rt = new Rectangle(x,y,w,h);
return rt;
} public void mouseDragged( MouseEvent e ) {
Rectangle rt = getRect( start, e.getPoint() );
Canvas.this.tmp = rt;
Canvas.this.repaint();
}
}
}
要讲你提供代码移植到我的程序上还需要一点时间进行研究
现在就给你分吧