首先在这里说几个东西:1.Layer层无边界的。 2.Pane窗格有边界的容器。
IFigure在draw2d中的位置,已经draw2d这套架构的机制咱不在这里详述。记得第一次接触这个,找到最多的就是draw2d的机制的文章。当然IFigure的文章也多,但是为了更好的学习Figure,还是写一篇这样的文章,部分内容来自网上。
IFigure:这个接口里面定义了很多东西,但是主要分为四个部分:1.维护父子关系。2.添加事件监听器。3.画界面的方法。4.管理界面的方法。这里只是列举一些觉得有用的跟界面相关的方法,其他的用的时候再分析。
add(IFigure figure, Object constraint):在IFigure中有四个添加子的重载方法,其中这一个传入的第二个参数是object对象。这里所说的constraint(约束)主要是跟布局息息相关的,它可以是形状,也可以是特点布局管理器中指定的参数。
boolean containsPoint(Point p):判断点是否在当前区域内。
void erase():一个擦除当前IFigure的方法,重画前常调用。
findFigureAt(Point p):找当前点下的IFigure,有3个重载方法,可以选择遍历方式。findFigureAtExcluding与之相反。
getMaximumSize,getMinimumSize,getPreferredSize:等都是布局管理器中常用到的方法。
void paint(Graphics graphics):这个方法是IFigure 提供的GC接口,用这个方法画当前IFigure 的形状,很嗨皮的这方法。
repaint():重绘。
IFigure下的子接口:
Connection:这是一个线的基础接口,主要做三件事:1.获取源和目标的锚点。2.存储PointList线上的点。3.设定路由方式。
FreeformFigure:所有实现此接口的figure都具备向四周延伸的能力,但是此种figure必须放在FreeformViewport类似容器里面。
IImageFigure:一个有图片的figure
IScrollableFigure:一个带有ScrollPane的figure,从效果上来说,此figure拥有一个属于自己的侧滑条。
Orientable:简单接口,描述HORIZONTAL和VERTICAL相关
RotatableDecoration:此接口提供两个方法:1.setLocation设置旋转的点 2.setReferencePoint设置旋转的角度
ScalableFigure:一个提供可缩放功能的接口,gef编辑器中实现的ZoomManeger功能还不错。
IFigure的实现类:
Figure:几乎每一个Figure里面都有一个Helper,牛叉的是Figure的Helper叫这个AncestorHelper注定牛叉,Helper主要是对事件的管理。
erase():这个方法是擦除当前Figure,擦除自己的同时必须重画父容器,因为父有可能改变。
repaint(Rectangle rect):重画方法会调用UpdateManager对象的addDirtyRegion方法类似一个注册为脏的意思。
另外看看figure的paint方法:画图其实就是一个基本功,这里其实人家给出了一个很清晰的画图的思路。
public void paint(Graphics graphics) {
if (getLocalBackgroundColor() != null)
graphics.setBackgroundColor(getLocalBackgroundColor());
if (getLocalForegroundColor() != null)
graphics.setForegroundColor(getLocalForegroundColor());
if (font != null)
graphics.setFont(font);
graphics.pushState();
try {
paintFigure(graphics);
graphics.restoreState();
paintClientArea(graphics);
paintBorder(graphics);
} finally {
graphics.popState();
}
}
DrawerFigure:gef中的palette面板上的分组的那个Figure,点击能够像抽屉一样动的Figure。
FlowFigure:FlowFigure和它的子,都是用于描述文本的Figure。
Shape:Shape和它的子是用于描述图形的,它默认提供了几个基本的图形,RectangleFigure(矩形)和Ellipse(椭圆),RoundedRectangle(圆角矩形),PolylineShape(折线),PolygonShape(多边形),Polyline(线)。
如果对默认提供的Figure用起来不满意,可以使用GC画:
一般我们的Figure都是继承Figure或者它的孩子,所以我们优先可以考虑覆盖paintFigure,paintClientArea
,paintBorder这些方法。
工具方法:
FigureUtilities:这个工具类,可以转换颜色,转换一个高亮的和一个暗的。还可以获取文本的宽度。制造阴影的方法:makeGhostShape()
分享到:
相关推荐
Draw2d是SWT的轻量级组件系统,Draw2d的实例由SWT组件、LightweightSystem和Draw2d的IFigure实例集合组成。
[]梳理draw2d的Java类继承关系1.1 [x]放置IFigure类图1.2 [x]放置EventDispatcher类图1.2.1 [] SWTEventDispatcher类图(实现)1.3 [x]替换UpdateManager类图1.3.1 [] DeferredUpdateManager类图(实现)1.4 [x]...
按名称而不是句柄引用图形,还包括滚轮缩放和平移...fHandle = iFigure('My Figure', 'zoom') 会将图形打开到它之前的位置,并使用基于滚轮的缩放和平移。 一些键盘键将允许多子图图像的同步缩放(在 x、y 或两者中)。
波士顿房价数据集Boston House Price 全网最便宜
三种实现FPGA实现UDP协议的代码工程(包括ARP、ICMP),包含使用设计文档。 第一种,米联客的DCP封装包 第二种,正点原子的源码工程 第三种,基于正点原子的赛灵思MAC核的代码工程。
Red_Hat_Enterprise_Linux-7-RPM_Packaging_Guide-en-US
Matlab 三维人脸识别系统 V 4.3.zip
信捷XD PLC MODBUS控制阀岛通信 案例程序
大家好呀!今天来介绍一款常用进制转换器,也就是 16 进制、10 进制、2 进制转换计算器。有了它,你可以轻松实现不同进制之间的快速转换。无论是将 16 进制转换为 10 进制或 2 进制,还是从其他进制转换过来,它都能准确而高效地完成。无论是在计算机编程、数字电路等领域,还是日常对进制转换有需求的时候,它都能成为你的得力小助手,让进制转换不再麻烦,快来试试吧!
这款微信小程序是一个创新的智能排队取号系统,专为提高服务行业的效率和顾客满意度而设计。它通过集成地图组件,为用户提供了一个直观、易用的排队和取号解决方案。用户可以在小程序中查看各个服务点的位置,实时了解排队情况,并进行远程取号。 小程序的主要功能包括: 实时排队信息:用户可以实时查看各个服务点的排队情况,包括当前排队人数、预计等待时间等。 远程取号:用户无需到现场即可通过小程序远程取号,节省了排队等待的时间。 地图导航:集成的地图组件可以帮助用户快速找到服务点的具体位置,并提供导航服务。 取号管理:用户可以在小程序中管理自己的取号信息,包括查看、取消等操作。 此外,小程序还支持多种场景,如餐饮、医疗、银行、政府服务等,适用于各种需要排队取号的服务场合。它不仅提高了服务效率,减少了顾客的等待时间,还为商家提供了客流管理和数据分析的工具。
520节日520节日表白神器520节日520节日表白神器520节日520节日表白神器520节日520节日表白神器
JAVA语言考试系统的设计与实现(LW+源代码+文献综述+外文翻译+开题报告)
相移法偏移MATLAB代码.zip
directx修复工具directx修复工具directx修复工具directx修复工具
基于matlab的三维地球建模,需联网.zip
字符串处理-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板
参加比赛的一些心得:感觉把比赛得那一门语言基础学会,输入输出([我写的python输入输出](https://blog.csdn.net/qq_41392228/article/details/123614298)),([C++的STL](https://blog.csdn.net/qq_41392228/article/details/124825895)),熟练里面的数据结构,如数组,map等,==主要还是基础==。熟悉了后,可以在刷一下基础题,巩固哈学了的基础知识。把基础学好了,拿个奖是没问题的,正常发挥即可。想那个好的名词,就要看看相关的算法了,主要就是暴力的+优化,BFS,DFS,比较难的就是动态规划,得找转换方程。 python版本的可见:https://blog.csdn.net/qq_41392228/article/details/123616441
基于 Rust + eBPF 丢弃 GFW DNS 污染包 GFW 污染 DNS 的方式为抢答,我们只需要丢弃投毒响应即可获得正确的解析结果。通过 eBPF 我们可以在内核中插入代码,相比在用户态启动代理,这样可以获得更好的性能。 要丢弃投毒响应,重点是找到它们的特征。 以 twitter.com 为例,当向 8.8.8.8 请求 twitter.com 的 A 记录时,正常的响应会返回 2 条结果(1Q2A);而 GFW 只会返回 1 条,但是使用了 2 次抢答。2 次抢答包其中一个 IP Identification = 0x0000,另一个 IP Flags = 0x40(Don't fragment);而正常的响应 IPID 不会是 0 并且 IP Flags = 0。 我们只要 Drop 掉符合对应特征的包即可。这时我们可以验证,twitter.com 可以正确解析(fb 等非 google 服务也正常)。
分数阶傅里叶变换数字水印matlab程序.zip