blob: a7d3591d7cfbb6730dbcb650dc2e562aa41e9c74 [file] [log] [blame]
<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<div>
<table width="100%" style="border-collapse: collapse" bordercolor="#111111" cellpadding="0" cellspacing="0">
<tr>
<td bgcolor="#000080" colspan="2"><b><font color="#FFFFFF">Example 4
- Connections and Anchors</font></b></td>
</tr>
<tr>
<td><br>
This example shows how to use Connections and ConnectionAnchors.&nbsp;
A connection is a figure that visually connects two anchors.&nbsp; The
anchors are usually places on figures which the connection is linking.<p>
The red and blue &quot;nodes&quot; can be dragged around with the mouse.&nbsp;
The connection will re-route itself automatically.&nbsp; The connections
children, the &quot;Midpoint&quot; label and the arrowhead, will also update.</p>
<p>The connection implementation used here is a PolylineConnection.&nbsp;
This implementation supports decorations, such as arrowheads.&nbsp;
PolygonDecorations added to the connection will be rotated correctly
by a Locator.&nbsp; Other decorations can be added with their own locators,
such as the &quot;Midpoint&quot; label in the demo.<br>
&nbsp;</p>
</td>
<td><img border="0" src="demo4.gif" width="243" height="245"></td>
</tr>
</table>
<table width="100%" style="border-collapse: collapse" bordercolor="#111111" cellpadding="0" cellspacing="0">
<tr>
<td valign="top">
<pre><font size="2" color="#000084">import</font><font size="2"> org.eclipse.swt.SWT;</font><font size="2" color="#000084">
import</font><font size="2"> org.eclipse.swt.widgets.Shell;
</font><font size="2" color="#000084">import</font><font size="2"> org.eclipse.swt.widgets.Display;</font><font size="2" color="#000084">
import</font><font size="2"> org.eclipse.draw2d.*;</font><font size="2" color="#000084">
import</font><font size="2"> org.eclipse.draw2d.geometry.*;
</font><font size="2" color="#000084">
public</font><font size="2"> </font><font size="2" color="#000084">class</font><font size="2"> Demo4 {
</font><font size="2" color="#000084">
public</font><font size="2"> </font><font size="2" color="#000084">static</font><font size="2"> </font><font size="2" color="#000084">void</font><font size="2"> main(String args[]){
Shell shell = </font><font size="2" color="#000084">new</font><font size="2"> Shell();
shell.setSize(350,350);
shell.open();
shell.setText(</font><font size="2" color="#008484">&quot;Demo 4&quot;</font><font size="2">);
LightweightSystem lws = </font><font size="2" color="#000084">new</font><font size="2"> LightweightSystem(shell);
IFigure panel = </font><font size="2" color="#000084">new</font><font size="2"> Figure();
lws.setContents(panel);
RectangleFigure
node1 = </font><font size="2" color="#000084">new</font><font size="2"> RectangleFigure(),
node2 = </font><font size="2" color="#000084">new</font><font size="2"> RectangleFigure();
node1.setBackgroundColor(ColorConstants.red);
node1.setSize(64, 36);
node2.setBackgroundColor(ColorConstants.blue);
node2.setLocation(</font><font size="2" color="#000084">new</font><font size="2"> Rectangle(100, 100, 64, 36));
PolylineConnection conn = </font><font size="2" color="#000084">new</font><font size="2"> PolylineConnection();
conn.setSourceAnchor(</font><font size="2" color="#000084">new</font><font size="2"> ChopboxAnchor(node1));
conn.setTargetAnchor(</font><font size="2" color="#000084">new</font><font size="2"> ChopboxAnchor(node2));
conn.setTargetDecoration(</font><font size="2" color="#000084">new</font><font size="2"> PolygonDecoration());</font>
<font size="2"> Label label = </font><font size="2" color="#000084">new</font><font size="2"> Label(</font><font size="2" color="#008484">&quot;Midpoint&quot;</font><font size="2">);
label.setOpaque(</font><font size="2" color="#000084">true</font><font size="2">);
label.setBackgroundColor(ColorConstants.buttonLightest);
label.setBorder(</font><font size="2" color="#000084">new</font><font size="2"> LineBorder());
conn.add(label, </font><font size="2" color="#000084">new</font><font size="2"> MidpointLocator(conn, 0));</font>
panel.add(node1);
panel.add(node2);
panel.add(conn);
<font size="2" color="#000084">new</font><font size="2"> Dragger(node1);
</font><font size="2" color="#000084">new</font><font size="2"> Dragger(node2);
Display display = Display.getDefault();
</font><font size="2" color="#000084">while</font><font size="2"> (!shell.isDisposed()) {
</font><font size="2" color="#000084">if</font><font size="2"> (!display.readAndDispatch())
display.sleep ();
}
}
</font><font size="2" color="#000084">static class</font><font size="2"> Dragger </font><font size="2" color="#000084">extends</font><font size="2"> MouseMotionListener.Stub </font><font size="2" color="#000084">implements</font><font size="2"> MouseListener {
</font><font size="2" color="#000084"> public</font><font size="2"> Dragger(IFigure figure){
figure.addMouseMotionListener(</font><font size="2" color="#000084">this</font><font size="2">);
figure.addMouseListener(</font><font size="2" color="#000084">this</font><font size="2">);
}
Point last;
</font><font size="2" color="#000084">public void</font><font size="2"> mouseReleased(MouseEvent e){}
</font><font size="2" color="#000084">public void</font><font size="2"> mouseClicked(MouseEvent e){}
</font><font size="2" color="#000084">public void</font><font size="2"> mouseDoubleClicked(MouseEvent e){}
</font><font size="2" color="#000084">public void</font><font size="2"> mousePressed(MouseEvent e){
last = e.getLocation();
}
</font><font size="2" color="#000084">public void</font><font size="2"> mouseDragged(MouseEvent e){
Point p = e.getLocation();
Dimension delta = p.getDifference(last);
last = p;
Figure f = ((Figure)e.getSource());
f.setBounds(f.getBounds().getTranslated(delta.width, delta.height));
}
};
}</font></pre>
</td>
</tr>
</table>
</div>
&nbsp;