URN Logo
UNIX Resources » Linux » China Linux Forum » Java&jsp技术 » 2 » swt和界面半透明效果,求助
announcement 声明: 本页内容为中国Linux论坛的内容镜像,文章的版权以及其他所有的相关权利属于中国Linux论坛和相应文章的作者,如果转载,请注明文章来源及相关版权信息。
Resources
China Linux Forum(finished)
Linux Forum(finished)
FreeBSD China(finished)
linuxforum.net
  业界新闻与评论
  自由软件杂谈
  IT 人生
  Linux软件快递
  翻译作坊
  Linux图书与评论
  GNU Emacs/XEmacs
  Linux 中文环境和中文化
  Linux桌面与办公软件
  Linux 多媒体与娱乐版
  自由之窗Mozilla
  笔记本电脑上的Linux
  Gentoo
  Debian 一族
  网络管理技术
  Linux 安装与入门
  WEB服务器和FTP服务器
  域名服务器和邮件服务器
  Linux防火墙和代理服务器应用
  文件及打印服务器
  技术培训与认证
  TI专版
  Linux内核技术
  Linux 嵌入技术
  Linux设备驱动程序
  Linux 集群技术
  LINUX平台数据库
  系统和网络安全
  CPU 与 编译器
  系统计算研究所专栏
  Linux下的GUI软件开发
  C/C++编程版
  PHP 技 术
  Java&jsp技术
  Shell编程技术
  Perl 编 程
  Python 编 程
  XML/Web Service 技术
  永远的Unix
  FreeBSD世界
   
swt和界面半透明效果,求助
Author: sword2k    Posted: 2005-12-01 08:30    Length: 2,774 byte(s)
[Original] [Print] [Top]
使用SWT开发用户界面,试图做到半透明效果。自绘界面,绘制时调整alpha值。

然而,发现很难做到。

1、窗口半透明:
为shell编制 paintlistener,读取图片,设定alpha为100,无法半透明。怀疑shell首先用背景颜色绘制后才调用自定义的paintlistener。怎么做呢?

2、窗口半透明之二:
使用一个canvas覆盖界面,发现可以做到半透明,具体测试见问题3描述。但是此时拖拽改变窗口位置,界面没有重新绘制。如果改变大小则屏幕开始混乱。

3、控件半透明:
控件半透明可以实现,但经过测试,控件绘制选择alpha之后,swt似乎简单的取出被本窗口覆盖的那部分屏幕区域为基础,然后绘制控件。而对于本窗口内部各个控件之间的覆盖关系完全不考虑,上层控件还是使用窗口背后的屏幕图像,而不考虑被覆盖的控件,被覆盖掉的控件就不能半透明看到。界面还是不正常。

求助!谢谢各位啦!!以下是问题2的程序代码,这里如何贴图啊?我的描述恐怕不清楚。

import org.eclipse.swt.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.events.*;

public class Talpha {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
final Display display = new Display();
final Shell shell = new Shell(display);

Canvas canvas = new Canvas(shell, SWT.NO_BACKGROUND);
//使用paintlistener,保证每次均重新绘制。
canvas.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
GC gc = e.gc;
//读图像
ImageData imageData = new ImageData("imgs/pt.jpg");
//这里是建立从左到右的渐进Alpha。
byte[] alphaValues = new byte[imageData.height * imageData.width];
for (int j = 0; j < imageData.height; j++) {
for (int i = 0; i < imageData.width; i++) {
alphaValues[j * imageData.width + i] = (byte) (255 - 255
* i / imageData.width);
}
}
imageData.alphaData = alphaValues;
Image image = new Image(display, imageData);
//绘制
gc.drawImage(image,0,0);
}
});

FillLayout fillLayout = new FillLayout();
fillLayout.type = SWT.VERTICAL;
shell.setLayout(fillLayout);
shell.setSize(200, 600);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}

}
--
Attached file: 589659-2-r.JPG
[Original] [Print] [Top]
« Previous thread
"试用NetBeans,赢取iPod" -- 2006-Q1版
Java&jsp技术
2
Next thread »
借贵地问一个javascript问题:怎样从FRAME外部访问FRAME中的元素?
     

Copyright © 2007~2009 UNIX Resources Network, All Rights Reserved.      About URN | Privacy & Legal | Help | Contact us
webmaster: webmaster@unixresources.net
This page created on 2009-09-07 16:50:04, cost 0.0190010070801 ms.