SWT 怎么把组件的背景设置成透明的?

蛰伏神兽 2011-04-13 08:40:42
比如像这样
我在shell 上放了个canvas组件,我想要的是,canvas背景透明,然后前景不透明。就是从canvas上能看到被canvas覆盖掉的shell的背景
...全文
700 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
colachens 2011-04-14
  • 打赏
  • 举报
回复
1 Canvas使用的图片是经过透明处理的
2 Canvas创建的时候,要使用SWT.TRANSPARENT风格参数
+1
magong 2011-04-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 bxftyt 的回复:]
比如像这样
我在shell 上放了个canvas组件,我想要的是,canvas背景透明,然后前景不透明。就是从canvas上能看到被canvas覆盖掉的shell的背景
[/Quote]
可以做,
注意:
1 Canvas使用的图片是经过透明处理的
2 Canvas创建的时候,要使用SWT.TRANSPARENT风格参数
magong 2011-04-14
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 bxftyt 的回复:]

eclipse3.2可以用3.6的包嘛?
[/Quote]
没试过。
你的代码我试过了,效果不错。
不行就下个3.6吧。
蛰伏神兽 2011-04-14
  • 打赏
  • 举报
回复
eclipse3.2可以用3.6的包嘛?
蛰伏神兽 2011-04-14
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 magong 的回复:]

引用 7 楼 bxftyt 的回复:

可是为什么我没找到这个SWT.TRANSPARENT的参数啊

你的SWT版本?
我用的3.6的。
[/Quote]
我是3.2的。。这差别是不是很大?换一个?
magong 2011-04-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 bxftyt 的回复:]

可是为什么我没找到这个SWT.TRANSPARENT的参数啊
[/Quote]
你的SWT版本?
我用的3.6的。
蛰伏神兽 2011-04-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 magong 的回复:]

引用楼主 bxftyt 的回复:
比如像这样
我在shell 上放了个canvas组件,我想要的是,canvas背景透明,然后前景不透明。就是从canvas上能看到被canvas覆盖掉的shell的背景

可以做,
注意:
1 Canvas使用的图片是经过透明处理的
2 Canvas创建的时候,要使用SWT.TRANSPARENT风格参数
[/Quote]
可是为什么我没找到这个SWT.TRANSPARENT的参数啊
只有
SWT.TRANSPARENCY_ALPHA
SWT.TRANSPARENCY_MASK
SWT.TRANSPARENCY_NONE
SWT.TRANSPARENCY_PIXEL
和SWT.DRAW_TRANSPARENT

这里有个例子,比如说这个我该怎么改

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);
shell.setBackground(display.getSystemColor(SWT.COLOR_BLUE));
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("1.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();
}
}
蛰伏神兽 2011-04-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 darling_sheep 的回复:]

JComponent里面有一个方法setOpaque(false)可以把组件设成透明的,不知道SWT能不能用。但这个是是把组件完全设置为透明,连他的轮廓也看不见了。
楼主你这界面挺炫的,能不能把代码贴出来?我还没有接触SWT。
[/Quote]
这个图我是网上找的...只是想说明是类似这个样子的。
我的要求只是
“我在shell 上放了个canvas组件,我想要的是,canvas背景透明,然后前景不透明。就是从canvas上能看到被canvas覆盖掉的shell的背景”
这句话
蛰伏神兽 2011-04-13
  • 打赏
  • 举报
回复
这个图我是网上找的...只是想说明是类似这个样子的。
我的要求只是
“我在shell 上放了个canvas组件,我想要的是,canvas背景透明,然后前景不透明。就是从canvas上能看到被canvas覆盖掉的shell的背景”
这句话
Darling_sheep 2011-04-13
  • 打赏
  • 举报
回复
JComponent里面有一个方法setOpaque(false)可以把组件设成透明的,不知道SWT能不能用。但这个是是把组件完全设置为透明,连他的轮廓也看不见了。
楼主你这界面挺炫的,能不能把代码贴出来?我还没有接触SWT。
蛰伏神兽 2011-04-13
  • 打赏
  • 举报
回复
up,up,up

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧