Download testbed2.zip
Program allows user to drag the object no matter where the mouse is.
See also
TestDrag1.java
// TestDrag1.java import java.awt.*; import java.util.*; import java.awt.geom.*; import java.awt.event.*; import javax.swing.*; public class TestDrag1 extends GridPanel implements MouseMotionListener { Capacitor c1; JLabel status = new JLabel(" "); double xoffset, yoffset; TestDrag1() { c1 = new Capacitor(); c1.setPosition(0.0,1.0); c1.setAngle(30.0); c1.color = Color.BLUE; c1.name = "C1"; status.setBackground(Color.WHITE); status.setOpaque(true); status.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4)); addMouseMotionListener( this ); addMouseListener(new MouseHandler()); } public void drawContent(Graphics g) { c1.draw(g); } private class MouseHandler extends MouseAdapter { public void mousePressed(MouseEvent e) { Point2D src = new Point2D.Double(e.getX(),e.getY()); Point2D dst = new Point2D.Double(); tf.transform(src,dst); xoffset = c1.xpos - dst.getX(); yoffset = c1.ypos + dst.getY(); } public void mouseReleased(MouseEvent e) { status.setText(" "); } } public void mouseDragged( MouseEvent e ) { Point2D src = new Point2D.Double(e.getX(),e.getY()); Point2D dst = new Point2D.Double(); tf.transform(src,dst); c1.setPosition(dst.getX()+xoffset,-dst.getY()+yoffset); repaint(); String str = String.format("Cursor dragged to [ %.2g, %.2g]",dst.getX(),-dst.getY()); status.setText(str ); } public void mouseMoved( MouseEvent e ) { } public static void main(String[] args) { EventQueue.invokeLater(() -> { TestDrag1 panel = new TestDrag1(); JFrame application = new JFrame("TestDrag1"); application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); application.add(panel); application.add(panel.status,BorderLayout.SOUTH); application.setSize(496,400); application.setVisible(true); }); } }
Maintained by John Loomis, updated Thu Feb 20 15:23:38 2020