import java.awt.Dimension; import java.awt.Toolkit; import java.awt.event.WindowEvent; import java.awt.event.WindowAdapter; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.BorderLayout; import java.util.Observer; import javax.swing.JFrame; import javax.swing.JComponent; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.Color; import java.awt.Rectangle; import java.awt.Font; import java.awt.Component; import java.awt.geom.Point2D; import java.awt.geom.Line2D; import java.awt.geom.Rectangle2D; import java.awt.geom.Ellipse2D; import java.awt.font.TextLayout; public class PickandMove { private static JFrame window; // The application window private static Board view; // The view of the sketch static MouseHandler mouseHandler; static boolean picked = false; // true if rect has been picked static double dx, dy; // difference between location of cursor and location of rect static Point2D.Double corner = new Point2D.Double(50.0,50.0); //corner of rect static Rectangle2D.Double rect = new Rectangle2D.Double(corner.getX(),corner.getY(),140,100); public static void main(String[] args) { window = new JFrame("Pick and Move a Rectangle"); // Create the app window window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Default is exit the application Toolkit theKit = window.getToolkit(); // Get the window toolkit Dimension wndSize = theKit.getScreenSize(); // Get screen size // Set the position to screen center & size to half screen size window.setBounds(wndSize.width/4, wndSize.height/4, // Position wndSize.width/2, wndSize.height/2); // Size view = new Board(); // Create the view mouseHandler = new MouseHandler(); view.addMouseListener(mouseHandler); window.getContentPane().add(view, BorderLayout.CENTER); window.setVisible(true); } static class Board extends JComponent{ public void paint(Graphics g) { Graphics2D g2D = (Graphics2D)g; // Get a 2D device context g2D.setPaint(color); g2D.fill(rect); g2D.draw(rect); g2D.setPaint(Color.GREEN); g2D.setFont(new Font("Arial", Font.PLAIN, 18)); g2D.draw(new Line2D.Float(240.0f, 120.0f, 80.0f, 200.0f)); g2D.draw(new Ellipse2D.Double(220.0,100.0,40.0,40.0)); g2D.setPaint(Color.RED); g2D.drawString("Thanksgiving",70,100); } public Color color = Color.GREEN; private Graphics2D g2D = null; // Temporary graphics context } static class MouseHandler extends MouseAdapter { // remember location of rect relative to cursor public void mousePressed(MouseEvent e) { if (rect.contains(e.getX(), e.getY())) { picked = true; dx = corner.getX() - e.getX(); dy = corner.getY() - e.getY(); } } // redraw picture public void mouseReleased(MouseEvent e) { if (picked) { picked = false; corner.setLocation(e.getX() + dx,e.getY() + dy); rect = new Rectangle2D.Double(corner.getX(),corner.getY(),140,100); view.repaint(); } } } }