Swinghacks——自定义边框

来源:互联网 发布:网络乞丐 编辑:程序博客网 时间:2024/06/06 06:12

自定义边框用到的情况也比较少(如果只是为了美观的话)

如下图,把刻度做到边框上是个不错的选择


当然如果真的为了美观,那看看下面的图片:


这又让我想起做web时用div布局,宽度自增长时那css写的真是累,ui  ux什么的是很花时间和心思,哎,不过swing就算了,不美观而且设计的非常复杂。个人还是比较支持原生态swt,但是如果真决定用swt写一个产品的话,那其实可以考虑不用java了。要原生态效果,语言选择就多了。

跑题了,回到边框。原理基本上就是画,上下左右  加上  4个角,共8个边框需要画。所以画边框的时候,需要知道的信息就是,边框占据多大空间 和 组件的宽高

边框继承Border接口,此接口共3个方法:

1、获取边框宽度信息

Insets getBorderInsets(Component c);

这个方法返回边框占据的空间信息,分别是上下左右位置

public Insets(int top, int left, int bottom, int right)
2、边框是否透明

boolean isBorderOpaque();

Opaque是不透明的意思,别搞混了此方法返回边框是否透明,注意

边框的空间是要算在组件的高宽中的,比如组件大小是100x100,边框是10,那么中间80x80的空间就是组件除去边框的空间

isBorderOpaque为true就是不透明,那么此时画边框的时候,就需要把中间80x80的空间也画上某种颜色,否则就是bug。你可以理解为,如果边框不透明,那么此时边框就不仅仅是周围的10,而是100x100。

3、绘制边框

void paintBorder(Component c, Graphics g, int x, int y, int width, int height);

这个方法没什么好说了,width height是组件的高宽,通过getBorderinsets(c)方法获取边框信息,然后就开始用Graphics慢慢画吧。话说swing单线程的调用操作系统底层的paint方法画界面真的让人感觉很蛋疼

如果想自定义边框,那extends AbstractBorder是不错的选择

原创粉丝点击