Вопрос по java, swing – Непрозрачные компоненты в прозрачных окнах Java

1

Мне удалось сделать прозрачными окна Java, но у меня возникли проблемы с наложением непрозрачных компонентов поверх этих окон. JFrame.setOpacity (0) и AWTUtilities setWindowOpacity передают прозрачность составляющим компонентам. Кроме того, JFrame.setBackground (0,0,0,0) каким-то образом отбрасывает прозрачность в указанные компоненты.

Как я могу это исправить

test классы: прозрачный фон, setOpacity и AWTUtility соответственно

<code>import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.Color;

public class test {
public static void main(String[] args){
JFrame frame = new JFrame("test");
JLabel label = new JLabel("Label text");
frame.setUndecorated(true);
frame.setBackground(new Color(0,0,0,128));
frame.add(label);
frame.pack();
frame.setVisible(true);
}
}


public class test2 {

public static void main(String[] args){
JFrame frame = new JFrame("test");
JLabel label = new JLabel("Label text");
frame.setUndecorated(true);
frame.setOpacity(.50f);
frame.add(label);
frame.pack();
frame.setVisible(true);
}
}


import com.sun.awt.AWTUtilities;
import java.lang.reflect.Method;
import java.awt.Window;

public class test3 {
public static void main(String[] args){
JFrame frame = new JFrame("test");
JLabel label = new JLabel("Label text");
frame.setUndecorated(true);

try {
Class<?> awtUtilitiesClass = Class.forName("com.sun.awt.AWTUtilities");
Method mSetWindowOpacity = awtUtilitiesClass.getMethod("setWindowOpacity", Window.class, float.class);
mSetWindowOpacity.invoke(null, frame, Float.valueOf(0.50f));
} catch (Exception x){}     

frame.add(label);
frame.pack();
frame.setVisible(true);
}
}
</code>

EDIT: я пробовал setBackground (0,0,0,0) в Windows, где он работает, но он не работает должным образом в Linux (xfce).

Для более быстрой помощи, отправьте SSCCE. Andrew Thompson

Ваш Ответ

1   ответ
0

boolean), вы можете получить то, что вы хотите. Вот пример полупрозрачной метки (с красным фоном):

import java.awt.Color;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;

import com.sun.awt.AWTUtilities;

public class Test3 {

    protected static void initUI() {
        JFrame frame = new JFrame("test");
        JLabel label = new JLabel("Label text");
        label.setOpaque(true);
        label.setBackground(new Color(255, 0, 0, 128));
        frame.setUndecorated(true);

        AWTUtilities.setWindowOpaque(frame, false);
        frame.add(label);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                initUI();
            }
        });
    }
}

Вот несколько скриншотов с различными значениями для альфа-канала (сделаны на белом фоне):

Альфа установлена на 128 (полупрозрачный):

Alpha установлен в 0 (полностью прозрачный):

Альфа установлена на 255 (полностью непрозрачная):

На моем компьютере метка этого примера частично прозрачна, даже если я установил альфа на 0, хотя это не так. Я не могу заставить что-то работать, и я начинаю думать, что это из-за платформы, которую я использую. septette
@ septette Я обновил свой пост различными снимками экрана, в которых альфа-значение цвета фона было установлено на разные значения. Мой конфиг (здесь) - WinXP с JDK7 (но я уверен, что он работает на JDK6, по крайней мере, в последних версиях) Guillaume Polet

Похожие вопросы