import java.applet.Applet; import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Canvas; import java.awt.Color; import java.awt.Dimension; import java.awt.Frame; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Label; import java.awt.Rectangle; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.*; //Use double buffering to remove rectangle flickers and make it repaint faster. public class move extends JApplet { static protected Label label = new Label("Drag rectangle around within the area"); public void init() { getContentPane().setLayout(new BorderLayout()); getContentPane().add(new MyCanvas()); getContentPane().add("South", label); } public static void main(String s[]) { Frame f = new Frame("move"); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); Applet applet = new move(); f.add("Center", applet); applet.init(); //f.pack(); f.setSize(new Dimension(550, 250)); f.setVisible(true); } } class MyCanvas extends Canvas implements MouseListener, MouseMotionListener // Canvas { Rectangle rect = new Rectangle(0, 0, 100, 50); Graphics2D g2; int preX, preY; int finalX, finalY; boolean isFirstTime = true; Rectangle area; boolean pressOut = false; private String flag= "none"; public MyCanvas() { setBackground(Color.white); addMouseMotionListener(this); addMouseListener(this); } public void mouseClicked(MouseEvent e) { preX = e.getX(); preY = e.getY(); flag = "ok"; move.label.setText("Start:" + e.getX() + ", " + e.getY()); } public void mousePressed(MouseEvent e) { //preX = rect.x - e.getX(); //preY = rect.y - e.getY(); //if (rect.contains(e.getX(), e.getY())) // updateLocation(e); //else { // move.label.setText("Drag it."); // pressOut = true; //} //preX = e.getX(); //preY = e.getY(); } public void mouseDragged(MouseEvent e) { //if (!pressOut) // updateLocation(e); //else // move.label.setText("Drag it."); //finalX = e.getX(); //finalY = e.getY(); } public void mouseReleased(MouseEvent e) { //if (rect.contains(e.getX(), e.getY())) // updateLocation(e); //else { // move.label.setText("Drag it."); // pressOut = false; //} } public void mouseMoved(MouseEvent e) { //int mouseX = 0; //int mouseY = 0; //mouseX=e.getX(); //mouseY=e.getY(); //move.label.setText(e.getX() + ", " + e.getY()); //System.out.println("You clicked on "+mouseX+","+mouseY); // move.label.setText("X"); if(flag == "ok") { finalX = e.getX(); finalY = e.getY(); //repaint(); } } public void mouseExited(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } // public void updateLocation(MouseEvent e) // { // rect.setLocation(preX + e.getX(), preY + e.getY()); // // if (checkRect()) { // move.label.setText(rect.getX() + ", " + rect.getY()); // } // else { // move.label.setText("drag inside the area."); // } // repaint(); // } /*public void paintComponent(Graphics g) { g.drawLine(10, 10, 125, 125); g.drawLine(preX, preY, finalX, finalY); }*/ public void paint(Graphics g) { //g.drawLine(10, 10, 125, 125); // g.setColor(Color.black); // g.drawRect(preX, preY, finalX, finalY ); g.drawLine(preX, preY, finalX, finalY ); // update(g); } public void update(Graphics g) { // Graphics2D g2 = (Graphics2D) g; // Dimension dim = getSize(); // int w = (int) dim.getWidth(); // int h = (int) dim.getHeight(); // g2.setStroke(new BasicStroke(8.0f)); // if (isFirstTime) { // area = new Rectangle(dim); // rect.setLocation(w / 2 - 50, h / 2 - 25); // isFirstTime = false; // } // Clears the rectangle that was previously drawn. // g2.setPaint(Color.white); // g2.fillRect(0, 0, w, h); // g2.setColor(Color.red); // g2.draw(rect); // g2.setColor(Color.black); // g2.fill(rect); } boolean checkRect() { if (area == null) { return false; } if (area.contains(rect.x, rect.y, 100, 50)) { return true; } int new_x = rect.x; int new_y = rect.y; if ((rect.x + 100) > area.getWidth()) { new_x = (int) area.getWidth() - 99; } if (rect.x < 0) { new_x = -1; } if ((rect.y + 50) > area.getHeight()) { new_y = (int) area.getHeight() - 49; } if (rect.y < 0) { new_y = -1; } rect.setLocation(new_x, new_y); return false; } }