Note that there are some explanatory texts on larger screens.

plurals
  1. POHow to move figures when they are part of a connection
    primarykey
    data
    text
    <p>I am working on a small graphical editor using the Draw2d library (without GEF). One requirement is, that you can move figures by dragging them with the mouse. This works fine as long as there is no (Polyline-) connection between the figures. When I added a connection, all is rendered correctly but it is impossible to move the figures.</p> <p>Here is a code example that shows the problem:</p> <pre><code>public class Main { public static void main(String[] args) { Display d = new Display(); final Shell shell = new Shell(d); shell.setSize(400, 400); shell.setText("Draw2d Test"); LightweightSystem lws = new LightweightSystem(shell); Figure contents = new Figure(); XYLayout contentsLayout = new XYLayout(); contents.setLayoutManager(contentsLayout); // create figures Figure f1 = new TestFigure("Test 1"); Figure f2 = new TestFigure("Test 2"); MouseManager mm = new MouseManager(); // register mouse listeners f1.addMouseMotionListener(mm); f1.addMouseListener(mm); f2.addMouseMotionListener(mm); f2.addMouseListener(mm); // set constraints to layout manager contentsLayout.setConstraint(f1, new Rectangle(10, 10, -1, -1)); contentsLayout.setConstraint(f2, new Rectangle(200, 200, -1, -1)); // add to layout manager contents.add(f1); contents.add(f2); // add connection // When uncommenting these lines, dragging works fine PolylineConnection c = new PolylineConnection(); c.setSourceAnchor(new ChopboxAnchor(f1)); c.setTargetAnchor(new ChopboxAnchor(f2)); c.setConnectionRouter(new ManhattanConnectionRouter()); contents.add(c); lws.setContents(contents); shell.open(); while (!shell.isDisposed()) { while (!d.readAndDispatch()) { d.sleep(); } } } } class MouseManager implements MouseMotionListener, MouseListener { Figure selection; private Point lastDragLocation; @Override public void mousePressed(MouseEvent me) { System.out.println("mouse pressed"); selection = (Figure) me.getSource(); } @Override public void mouseReleased(MouseEvent me) { System.out.println("mouse released"); selection = null; lastDragLocation = null; } @Override public void mouseDragged(MouseEvent me) { if (lastDragLocation != null &amp;&amp; selection != null) { int offsetX = me.getLocation().x - lastDragLocation.x; int offsetY = me.getLocation().y - lastDragLocation.y; int newX = selection.getLocation().x + offsetX; int newY = selection.getLocation().y + offsetY; System.out.println(String.format("NewX: %d, NewY: %d", newX, newY)); selection.setBounds(selection.getBounds().getTranslated(offsetX, offsetY)); } lastDragLocation = me.getLocation(); } // [removed empty implementations of the interface for this post] } class TestFigure extends RectangleFigure { public Color classColor; public TestFigure(String name) { ToolbarLayout layout = new ToolbarLayout(); setLayoutManager(layout); setOpaque(true); classColor = new Color(null, 255, 255, 206); setBackgroundColor(classColor); Label lbl_name = new Label(name); add(lbl_name); } @Override protected void finalize() throws Throwable { classColor.dispose(); super.finalize(); } } </code></pre> <p>Does anyone have an idea how to make dragging possible when there is a connection between the two figures (It is not neccessary to render the dragging of the connection)?</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload