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

解决方案 »

  1.   

    JComponent里面有一个方法setOpaque(false)可以把组件设成透明的,不知道SWT能不能用。但这个是是把组件完全设置为透明,连他的轮廓也看不见了。
    楼主你这界面挺炫的,能不能把代码贴出来?我还没有接触SWT。
      

  2.   

    这个图我是网上找的...只是想说明是类似这个样子的。
    我的要求只是
    “我在shell 上放了个canvas组件,我想要的是,canvas背景透明,然后前景不透明。就是从canvas上能看到被canvas覆盖掉的shell的背景”
    这句话
      

  3.   

    这个图我是网上找的...只是想说明是类似这个样子的。
    我的要求只是
    “我在shell 上放了个canvas组件,我想要的是,canvas背景透明,然后前景不透明。就是从canvas上能看到被canvas覆盖掉的shell的背景”
    这句话
      

  4.   

    可以做,
    注意:
    1 Canvas使用的图片是经过透明处理的
    2 Canvas创建的时候,要使用SWT.TRANSPARENT风格参数
      

  5.   

    1 Canvas使用的图片是经过透明处理的
    2 Canvas创建的时候,要使用SWT.TRANSPARENT风格参数
    +1
      

  6.   

    可是为什么我没找到这个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();
            }
    }
      

  7.   

    你的SWT版本?
    我用的3.6的。