关键字:Draw2d 拖拽 Drag and Drop
public class Scroller2 { IFigure getRootFigure() { Panel panel = new Panel(); panel.setLayoutManager(new XYLayout()); RectangleFigure rFigure = new RectangleFigure(); rFigure.setSize(55,55); rFigure.setBackgroundColor(ColorConstants.green); new Dnd(rFigure); panel.add(rFigure); return panel; } public static void main(String args[]) { Display display = Display.getDefault(); Shell shell = new Shell(); shell.setSize(400, 300); shell.open(); shell.setText("ScrollPane Example"); LightweightSystem lws = new LightweightSystem(shell); lws.setContents(new Scroller2().getRootFigure()); while (!shell.isDisposed ()) { if (!display.readAndDispatch ()) display.sleep (); } } } class Dnd extends MouseMotionListener.Stub implements MouseListener { Point start; public Dnd(IFigure figure) { figure.addMouseMotionListener(this); figure.addMouseListener(this); } public void mouseReleased(MouseEvent e){ Figure f = ((Figure)e.getSource()); f.setCursor(null); } public void mouseClicked(MouseEvent e){} public void mouseDoubleClicked(MouseEvent e){} public void mousePressed(MouseEvent e) { Figure f = ((Figure)e.getSource()); f.setCursor(Display.getCurrent().getSystemCursor(SWT.CURSOR_SIZEALL)); start = e.getLocation(); } public void mouseDragged(MouseEvent e) { if(start == null) { return; } Point p = e.getLocation(); Dimension d = p.getDifference(start); start = p; Figure f = ((Figure)e.getSource()); f.setBounds(f.getBounds().getTranslated(d.width, d.height)); } }
关于拖拽有个奇怪的问题:
有连线 + add(IFigure figure, Object constraint)的方式加的图形。不好拖拽,可能因为constraint。
public class HelloWorld2 { public static void main(String args[]) { Shell shell = new Shell(); shell.setText("Draw2d Hello World"); shell.setSize(300, 300); shell.open(); // create content 4 shell. createContent4Shell(shell); while (!shell.isDisposed ()) { if (!Display.getDefault().readAndDispatch ()) Display.getDefault().sleep (); } } private static void createContent4Shell(Shell shell) { Panel rootFigure = new Panel(); rootFigure.setLayoutManager(new XYLayout()); IFigure figure1 = new Ellipse(); Ellipse figure2 = new Ellipse(); // -------------------------------------------------------- // add connection PolylineConnection connection = new PolylineConnection(); connection.setSourceAnchor(new ChopboxAnchor(figure1)); connection.setTargetAnchor(new EllipseAnchor(figure2)); rootFigure.add(connection); // figure1.setBounds(new Rectangle(10,10,60,30)); // figure2.setBounds(new Rectangle(170,170,90,90)); // rootFigure.add(figure1); // rootFigure.add(figure2); rootFigure.add(figure2,new Rectangle(170,170,90,90)); rootFigure.add(figure1,new Rectangle(10,10,60,30)); new Dnd(figure1); new Dnd(figure2); LightweightSystem lws = new LightweightSystem(shell); lws.setContents(rootFigure); } } class Dnd extends MouseMotionListener.Stub implements MouseListener{ Point start; public Dnd(IFigure figure) { figure.addMouseMotionListener(this); figure.addMouseListener(this); } public void mouseReleased(MouseEvent e) { Figure f = ((Figure)e.getSource()); f.setCursor(null); } public void mouseClicked(MouseEvent e) {} public void mouseDoubleClicked(MouseEvent e) {} public void mousePressed(MouseEvent e) { Figure f = ((Figure)e.getSource()); f.setCursor(Display.getCurrent().getSystemCursor(SWT.CURSOR_SIZEALL)); start = e.getLocation(); } public void mouseDragged(MouseEvent e) { if(start == null) { return; } Point p = e.getLocation(); Dimension d = p.getDifference(start); start = p; Figure f = ((Figure)e.getSource()); f.setBounds(f.getBounds().getTranslated(d.width, d.height)); } }
但改为:
figure1.setBounds(new Rectangle(10,10,60,30)); figure2.setBounds(new Rectangle(170,170,90,90)); rootFigure.add(figure1); rootFigure.add(figure2); // rootFigure.add(figure2,new Rectangle(170,170,90,90)); // rootFigure.add(figure1,new Rectangle(10,10,60,30));
就可以拖动。可能是因为约束的原因。
看一下源代码可以看出区别,
public final void add(IFigure figure) { add(figure, null, -1); }
而
public final void add(IFigure figure, Object constraint) { add(figure, constraint, -1); }
也就说约束的方式就定死了figure的大小位置了。
相关推荐
实现文件的拖拽功能 import java.awt.AlphaComposite; import java.awt.Component; import java.awt.Graphics2D; import java.awt.Point; import java.awt.Rectangle; import java.awt.Toolkit; import java.awt....
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
麒麟win10双系统重新安装win10后麒麟启动菜单看不到解决方法
多邻国Duolingo v6.0.3 高级版.apk
QT网络编程: 实现TCP通讯设置(客户端)
减少重复造轮子,开源微信小程序商城(前后端开源:uniapp+Java)。快速搭建一个属于自己的微信小程序商城。
彩虹云商城 最新彩虹代刷V6.9.0免授权纯净完整版 直接上传源码解压缩后访问域名安装即可,亲测可用 彩虹自助下单系统 安装说明: 上传到空间后直接访问即可根据提示安装。 PHP推荐使用7.0及以上版本 V6.9 1.修复SQL注入漏洞 2.修复后台微信QQ扫码登录 V6.8.5 1.修复亿乐对接 2.新增支持倍数输入框 V6.8 1.更新全新的faka模板 2.新增微信快捷登录 3.新增批量下单功能 4.防CC配置新增滑动验证码模式 5.修复部分地区后台加载错误 6.修复https网站对接http支付接口 7.后台登录支持微信QQ扫码登录
MyBatis-Plus学习思维导图
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
分布式搜索引擎ElasticSearch思维导图
网鼎杯
网络安全入门教程(工具版)
科普里控制器调试软件工具使用 win64环境安装
内容概要:本文档详细介绍了GC9503V单片机a-Si TFT LCD驱动器的技术规格,包括主要特点、内部结构图、引脚定义以及系统接口等。GC9503V支持480x864分辨率,16.7百万色显示,无内置GRAM。文章还提供了详细的引脚尺寸、对齐标记尺寸、芯片信息以及接口模式控制的序列实例,如DCS写入命令及其参数。 适合人群:LCD显示屏设计人员、嵌入式系统工程师、电子硬件开发者和技术研究人员。 使用场景及目标:帮助开发者快速理解和应用GC9503V在实际产品中的具体使用方法,掌握LCM与MCU之间的数据交互方式,实现高效的屏幕驱动设计。 其他说明:GalaxyCore公司保留在不事先通知的情况下更改文档内容的权利。
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
yolo系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
某酒店排水课程设计计算书.doc
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据