import java.awt.*; import java.awt.event.*; import java.awt.image.BufferedImage; import java.util.Vector; class RelativeBounds extends Frame { RelativeBounds refThis; RelativeBoundsCanvas relativeBoundsCanvas=new RelativeBoundsCanvas(); public static void main(String args[]) { try { RelativeBounds rFrame=new RelativeBounds(); Dimension dimScreen=Toolkit.getDefaultToolkit().getScreenSize(); rFrame.setSize(dimScreen.width, dimScreen.height-40); rFrame.setVisible(true); } catch(Exception ex) { ex.printStackTrace(); } } RelativeBounds() { super("Relative Bounds"); refThis=this; setIconImage(new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB)); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent we) { System.exit(0); } }); add("Center", relativeBoundsCanvas); relativeBoundsCanvas.addMouseListener(relativeBoundsCanvas); relativeBoundsCanvas.addMouseMotionListener(relativeBoundsCanvas); } class RelativeBoundsCanvas extends Canvas implements MouseListener, MouseMotionListener { Vector vecRectangles=new Vector(); boolean blnDragging=false; int intCurrentX=-1; //The x pixel when mousePressed event is generated int intCurrentY=-1; //The y pixel when mousePressed event is generated int intCurrentX2=-1; //The x pixel when mouseDragged event is generated int intCurrentY2=-1; //The y pixel when mouseDragged event is generated RelativeBoundsCanvas() { super(); } public void mouseEntered(MouseEvent me) { } public void mouseExited(MouseEvent me) { } public void mousePressed(MouseEvent me) { Point mePoint=me.getPoint(); int intMods=me.getModifiersEx(); intMods=intMods & MouseEvent.BUTTON3_DOWN_MASK; if(intMods==MouseEvent.BUTTON3_DOWN_MASK) { //If the mouse button being pressed is the right mouse button then return because only a left mouse button drag should create a rectangle int meX=mePoint.x; int meY=mePoint.y; for(int i=0;i