浏览 2235 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-07-02
最后修改:2009-11-26
Anchor控制连线端点在图形上的位置,即“锚点”的位置,最易于使用的是ChopBoxAnchor,它先假设图形中心为连接点,然后计算这条假想连线与图形边缘的交汇点座位实际的锚点,其他Anchor,还有EllipseEAnchor、LabelAnchor和XYAnchor等。 Locator的作用是定位图形,例如希望在连接中点处以一个标签显示此链接的名称,就可以使用MidpointLocator来帮助定位这个标签,其他Locator还有ArrowLocator用于定位可旋转的修饰(Decoration,例如PolygonDecoration)、BendpointerLocator用于定位链接控制点、ConnectionEndpointLocator用于定位连接端点(通过制定uDistance和vDistance属性的值可以设置以端点为原点的坐标 实现简单图形的连接只要设置好连线的对应的锚点即可,下面是我给出的例子,通过PolylineConnection建立了node1和node2的连线,并且设置了node1和node2拖动的监听器,用户可以拖动图形到窗口的任意位置 package com.heming.draw2d.demo; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Display; import org.eclipse.draw2d.*; import org.eclipse.draw2d.geometry.*; /** * 连线的实现 * * @author 何明 * */ public class Connection { public static void main(String args[]) { Shell shell = new Shell(); shell.setSize(350, 350); shell.open(); shell.setText("Connection Demo"); LightweightSystem lws = new LightweightSystem(shell); IFigure panel = new Figure(); lws.setContents(panel); // 创建两个四边形的图形实例 RectangleFigure node1 = new RectangleFigure(), node2 = new RectangleFigure(); // 设置node1的背景色 node1.setBackgroundColor(ColorConstants.red); // 设置node1的大小和位置 node1.setBounds(new Rectangle(30, 30, 64, 36)); // 设置node2的背景色 node2.setBackgroundColor(ColorConstants.blue); // 设置node2的大小和位置 node2.setBounds(new Rectangle(100, 100, 64, 36)); // 创建一个连线的实例 PolylineConnection conn = new PolylineConnection(); // 设置连线起点的锚点 conn.setSourceAnchor(new ChopboxAnchor(node1)); // 设置连线目标的锚点 conn.setTargetAnchor(new ChopboxAnchor(node2)); // 设置连线目标的装饰器 conn.setTargetDecoration(new PolygonDecoration()); Label label = new Label("Midpoint"); label.setOpaque(true); label.setBackgroundColor(ColorConstants.buttonLightest); label.setBorder(new LineBorder()); // 添加连线的Locator conn.add(label, new MidpointLocator(conn, 0)); // 在底层Figure中添加子Figure panel.add(node1); panel.add(node2); panel.add(conn); // 添加node1拖动的监听器 new Dragger(node1); // 添加node2拖动的监听器 new Dragger(node2); Display display = Display.getDefault(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } } /** * 实现对图形的移动进行监听 * @author 何明 * */ static class Dragger extends MouseMotionListener.Stub implements MouseListener{ public Dragger(IFigure figure){ figure.addMouseMotionListener(this); figure.addMouseListener(this); } Point last; @Override public void mouseDoubleClicked(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { last = e.getLocation(); } @Override public void mouseReleased(MouseEvent e) { } @Override public void mouseDragged(MouseEvent e) { Point p = e.getLocation(); Dimension delta = p.getDifference(last); last = p; Figure f = (Figure) e.getSource(); //设置拖动的Figure的位置 f.setBounds(f.getBounds().getTranslated(delta.width,delta.height)); } } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |