现在的位置: 首页 > 综合 > 正文

打造酷炫风格的Swing界面(2)

2018年03月29日 ⁄ 综合 ⁄ 共 4910字 ⁄ 字号 评论关闭

在上一篇文章中,我们定制了不能拖放界面大小的窗口,但是很多时候,我们都必须能够实现窗口拖拉,但是图片的大小已经固定了,怎么办了?


 

能拖拉的窗口大小

 

在播放器的歌词窗口的窗口时可以拖拉大小的,如图1:

 

图1 拖拉的歌词窗口:

 


 

 

打造能拖拉的定制窗口

 

首先,我们应该想到无论窗口怎么拖拉大小,起四周的四个角的大小是不会变化的,我们把四个角的图片以窗口大小为变量定位在窗口的四个位置,图片素材如下图2;

 

图2:四个角的素材

    

 

 

 

在拖拉的过程中,改变大小的分别是四周的边距,我们可以根据窗口的大小来动态的填充四周的边距;图片素材如图3;

 

图3:四边距的素材

 

        

如下一节的文章中那样,我们扩展一个Border,把上面的图片依次的画上去;代码清单如下:

 

代码清单1:

 

 

其实,在处理剩下的那一个不足以将背景图片铺开的空间的时候,我们在图片单一的情况,事实上另一种处理方式是把图片拉伸开来,如下代码:

 

 

只不过这种方式会再拖拉的时候出现空白的不连贯,原因在于在图片渲染的时候,把内存中的同一张图片重复的绘制要比把一张图片拉伸显示的效率要高得多;

 

接下来,我们就是要在这个没有边框渲染的窗口上实现自己的拖拉大小的功能,当鼠标分别放在左上角,顶部,右上角,右边距,右下角,底部,左下角,左边距八个方位的时候,如下图4;

 

图4:八个方向

 

分别显示八个不同的鼠标的拖拉样式,并且在鼠标按下的时候,记录下初始位置和拖拉方向,在鼠标移动的时候改变窗口大小,在鼠标松开的时候复位标志变量;代码清单2是用于计算这个八个矩形;

 

代码清单2,计算八矩形位置:

 

 

  下面是当鼠标分别处于这8个矩形的时候分别应该显示的鼠标样式和记录下来的状态:

 

代码清单3:

 

 

 

 

 

下面则是根据鼠标是否在这个把8个矩形中来设定状态和鼠标样式;

 

代码清单4:

 

 

当鼠标按下的时候:

 

代码清单5:

 

 

当鼠标移动的时候:

 

代码清单6:

 

 

 

当选择了拖拉下面的边框的时候:

 

代码清单7:

 

 

当选择拖拉左边的边框的时候,这个时候必须保证右边的边的位置是固定不变的:

 

 

代码清单8:

 

 


总结

 

利用了角度拉伸不变,而填充被拉伸的空间来实现一个可拉伸的图片背景窗口,我们可以实现很多绚丽的窗口;

抱歉!评论已关闭.