Прозрачный холст SWT - PullRequest
       3

Прозрачный холст SWT

2 голосов
/ 22 февраля 2011

Я хотел бы сделать фон холста SWT прозрачным, чтобы за ним можно было видеть другие виджеты.

Я попытался установить альфа в 0 и заполнить холст прямоугольником, а также использоватьопция SWT.NO_BACKGROUND безрезультатна.

Ответы [ 4 ]

2 голосов
/ 23 февраля 2011

AFAIK, с помощью SWT невозможно разместить виджеты друг над другом таким образом (кроссплатформенным образом). Прозрачный фон не позволит увидеть другие виджеты. Также любые клики на прозрачных пикселях не будут делегированы виджетам позади.

Но вы можете поместить раковины друг на друга. И вы можете создавать прозрачные оболочки или оболочки с нерегулярными границами. См. Примеры Shell в Snippets . Это не то же самое, но в зависимости от того, чего вы хотите достичь, этого может быть достаточно.

1 голос
/ 20 ноября 2016

Есть способ сделать это на Linux (GTK) .(Тем не менее, не работает в Windows. (Не знаю о MacOSX.))

Просто setBackground в RGBA с альфа-каналом.Например:

Canvas canvas = new Canvas(parent, SWT.NONE);
canvas.setBackground(new Color(canvas.getDisplay(), 100,100,100,100));
//Note the last argument (I'm setting not only R, G, B, but also A).

Вам даже не нужны SWT.NO_BACKGROUND, SWT.TRANSPARENT или другие флаги стиля.

PS: Вы не должны создавать цвета таким образом.Цвета должны быть утилизированы с помощью утилизации.Присвойте вновь созданный цвет переменной, чтобы иметь возможность использовать его и освобождать.Я создал цвет "inline" только для простоты примера.

Дополнительное примечание: не устанавливайте альфа-канал на 0. Хотя меньшее значение должно означать более прозрачный, в действительности оно не работает со значением 0,только с 1 и выше.Возможно, он считает 0 неустановленным или т. Д.

0 голосов
/ 10 февраля 2014

Вы можете использовать:

shell.setAlpha(180);

Значение может быть установлено в диапазоне от 0 до 255 . 0 означает прозрачный и 255 означает сплошной цветной фон

0 голосов
/ 12 ноября 2013

В Windows у меня получился следующий прозрачный элемент управления:

final Composite composite = new Composite(parent, SWT.TRANSPARENT);
composite.addListener(SWT.Paint, new Listener() {
    @Override
    public void handleEvent(Event event) {
        event.gc.drawString("hello world", 0, 0, true);
    }
});

К сожалению, это не работает в OS X или Linux.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...