java不规则窗体的构建

 
不规则窗体的大体构建思路与以前没有什么不同,在这里,我仅陈述在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 窗体添加一些监听器,用于处理窗体重绘、鼠标拖拽、窗体关闭的事件方法。
源代码可以到http://download.csdn.net/user/lejuo/下载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值