private void redrawAll() { l1.setOffset(h1.getXOffset() + h1.getWidth() / 2, l1.getYOffset()); l2.setOffset(h2.getXOffset() + h2.getWidth() / 2, l2.getYOffset()); n1.setOffset(h1.getXOffset(), n1.getYOffset()); n2.setOffset(h2.getXOffset(), n2.getYOffset()); Point2D c1 = n1.getFullBounds().getCenter2D(); Point2D c2 = n2.getFullBounds().getCenter2D(); double dist = Math.abs(n2.getXOffset() - N - n1.getXOffset()); double t = dist < F ? dist / F : 1; Point2D t1 = translate(rotate(new Point2D.Double(R[0] * (1 - t), 0), -A[0]), c1); Point2D t2 = translate(rotate(new Point2D.Double(R[1], 0), -A[1]), clipX(c2, c1)); t2 = translate( makeDistanceFromOrigin( t2.getX() - c1.getX(), t2.getY() - c1.getY(), dist(t2, c1) * (1 - t)), c1); k1.centerBoundsOnPoint(t1.getX(), t1.getY()); k2.centerBoundsOnPoint(t2.getX(), t2.getY()); arc.reset(); arc.moveTo((float) c1.getX(), (float) c1.getY()); arc.curveTo( (float) t1.getX(), (float) t1.getY(), (float) t2.getX(), (float) t2.getY(), (float) c2.getX(), (float) c2.getY()); redrawArrows( c1.getX(), c1.getY(), t1.getX(), t1.getY(), t2.getX(), t2.getY(), c2.getX(), c2.getY()); }