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