import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Draw3 extends JFrame {
   private int topX, topY;
   private int width, height, upperX, upperY;
   private int bottomX, bottomY;

   public Draw3()
   {
      super( "Draw3" );
      addMouseListener( new MouseHandler( this ) );
      addMouseMotionListener( new MouseHandler2( this ) );
      setSize( 300, 200 );
      show();
   }

   public void setTopX( int x ) { topX = x; }
   public void setTopY( int y ) { topY = y; }
   public void setBottomX( int x ) { bottomX = x; }
   public void setBottomY( int y ) { bottomY = y; }

   public void paint( Graphics g )
   {
      width = Math.abs( topX - bottomX );
      height = Math.abs( topY - bottomY );
      upperX = Math.min( topX, bottomX );
      upperY = Math.min( topY, bottomY );

      g.drawRect( upperX, upperY, width, height );
   }

   public static void main( String args[] )
   {
      Draw3 app = new Draw3();

      app.addWindowListener(
         new WindowAdapter() {
            public void windowClosing( WindowEvent e )
            {
               System.exit( 0 );
            }
         }
      );
   }
}

class MouseHandler extends MouseAdapter {
   private Draw3 draw;

   public MouseHandler( Draw3 d ) { draw = d; }

   public void mouseReleased( MouseEvent e )
   {
      draw.setBottomX( e.getX() );
      draw.setBottomY( e.getY() );
      draw.repaint();
   }

   public void mousePressed( MouseEvent e )
   {
      draw.setTopX( e.getX() );
      draw.setTopY( e.getY() );
   }
}

class MouseHandler2 extends MouseMotionAdapter {
   private Draw3 draw;

   public MouseHandler2( Draw3 d ) { draw = d; }

   public void mouseDragged( MouseEvent e )
   {
      draw.setBottomX( e.getX() );
      draw.setBottomY( e.getY() );
      draw.repaint();
   }
}