【问题标题】:How to cover SWT control or controls with some transparent layer?如何用一些透明层覆盖 SWT 控件或控件?
【发布时间】:2014-02-17 14:54:02
【问题描述】:

我想在我的自定义控件中实现选择功能。此控件包含一个图像,我希望图像在选择时变为蓝色。我不想按位更改图像。

是否可以在其他控件上方绘制一些半透明的蓝色矩形来模拟选择?

更新

以下代码没有显示任何绘图:

public class ImageWithCaption extends Composite {

    private Label imageLabel;
    private Label textLabel;

    private void init() {
        setLayout(new GridLayout(1, false));

        imageLabel = new Label(this, SWT.NONE);
        imageLabel.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));

        textLabel = new Label(this, SWT.NONE);
        textLabel.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));

        addPaintListener(new PaintListener() {

            @Override
            public void paintControl(PaintEvent e) {

                GC gc = e.gc;


                gc.setForeground(e.display.getSystemColor(SWT.COLOR_BLUE));
                gc.fillRectangle(0, 0, e.width, e.height);

            }
        });
    }

    public ImageWithCaption(Composite parent, int style) {
        super(parent, style);
        init();

    }

    public void setText(String text) {
        textLabel.setText(text);
    }

    public String getText() {
        return textLabel.getText();
    }

    public Image getImage() {
        return imageLabel.getImage();
    }

    public void setImage(Image image) {
        imageLabel.setImage(image);
    }




}

【问题讨论】:

  • 您最好的选择是监听SWT.Paint,然后用GC 绘制Image,然后在顶部绘制一个半透明矩形(使用GC#setAlpha(int))。阅读this了解更多详情
  • 但是如何在合成上绘制呢?我的绘图似乎出现在构成合成的其他控件下方。
  • 您必须将监听器添加到持有图像的Label,而不是父Composite
  • 但是有可能以某种方式覆盖整个复合材料吗?

标签: java swt transparency layer glasspane


【解决方案1】:

透明度是 SWT 的一个难题...

有一个来自Opal的叠加层

或者你可以查看Appkit

我自己使用 Opal 的叠加层并对其进行了扩展以获得一些额外的功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    • 2011-02-08
    • 2011-04-19
    • 1970-01-01
    • 2011-04-16
    • 2011-05-29
    • 2016-02-15
    相关资源
    最近更新 更多