不规则窗体的大体构建思路与以前没有什么不同,在这里,我仅陈述在java中怎样实现它。本次内容在eclipse平台下开发,需要swt 的插件,可以到swt的官方网站
www.swt-designer.com去下载。
先说一下思路吧:先加载一幅图片,这幅图片具有不规则特性,然后将这幅图片设置为窗体的背景,这样就算完蛋。
加载图片靠以下代码来完成
public
Image getImage(Display display){
InputStream is = ImageLoad.
class
.getResourceAsStream(
this
.
IMAGE_NAME
);
Image result =
null
;
try
{
if
(is !=
null
) {
ImageData imageData =
new
ImageData(is);
if
(
imageData
!=
null
) {
result =
new
Image(display, imageData);
}
}
}
catch
(Exception e) {
e.printStackTrace();
}
finally
{
try
{
if
(is !=
null
)
is.close();
}
catch
(IOException e1) {
e1.printStackTrace();
}
}
return
result;
}
其中,
ImageLoad.
class
.getResourceAsStream(
this
.
IMAGE_NAME
)
的
ImageLoad
为方法所属的类,
this
.
IMAGE_NAME
为图片的名称。这样就返回一个图片。
设定窗体的背景图片则靠以下代码来实现:
//
加载图片
image
= new ImageLoad().getImage(
display
);
//region
代表区域,以下代码要求构造区域
Region region =
new
Region();
imageData
=
image
.getImageData();
//
区分
image
是
α
还是
β
像素
if
(
imageData
.
alphaData
!=
null
) {
for
(
int
y = 0; y <
imageData
.
height
; y++) {
for
(
int
x = 0; x <
imageData
.
width
; x++) {
if
(
imageData
.getAlpha(x, y) ==255) {
region.add(
imageData
.
x
+ x,
imageData
.
y
+ y,1,1);
}
}
}
}
else
{
ImageData mask =
imageData
.getTransparencyMask();
for
(
int
y = 0; y < mask.
height
; y++) {
for
(
int
x = 0; x < mask.
width
; x++) {
if
(mask.getPixel(x, y) !=0 ) {
region.add(
imageData
.
x
+ x,
imageData
.
y
+ y,1,1);
}
}
}
}
shell
.setRegion(region);
shell
.setSize(
imageData
.
x
+
imageData
.
width
,
imageData
.
y
+
imageData
.
height
);
注释中的详解已经解释得比较明白了,我就不多说了。不规则窗体就这样构建完毕。但是还需要给窗体设定窗体拖拽重绘制的功效,这样才能实现一般窗体的功能,这就需要你对
shell
窗体添加一些监听器,用于处理窗体重绘、鼠标拖拽、窗体关闭的事件方法。