Ubuntu 14.04 - Transparenz bei Fenster

Hallo,

ich habe nun schon einige Beispiele für transparente Fenster getestet und bekomme immer folgende Meldung:

Exception in thread „main“ java.lang.UnsupportedOperationException: TRANSLUCENT translucency is not supported.
at java.awt.Window.setOpacity(Window.java:3622)
at java.awt.Frame.setOpacity(Frame.java:962)

Ich nutze Ubuntu als OS und als IDE Netbeans.
Die FloatingFrames in Netbeans sind transparent. Nun frage ich mich, wie das in Netbeans gelöst wird?

mfG Seann

Hm, wie Netbeans das macht kann ich dir nicht sagen. Hast du mal folgendes Beispiel von Oracle getestet?
http://docs.oracle.com/javase/tutorial/uiswing/examples/misc/TranslucentWindowDemoProject/src/misc/TranslucentWindowDemo.java

Das funktioniert zumindest bei mir hier auf der Arbeit unter Windows. Ich kann dir heute Abend mal sagen wie es bei mir daheim unter Ubuntu ausschaut.

Ich habe das Beispiel getestet, folgendem Ergebnis:

Translucency is not supported

Nur wie gesagt, Netbeans nutzt auch Swing und dort funktioniert es ja auch unter Ubuntu.
Nun bin ich mal gespannt, was bei Dir rauskommt. Ich habe Ubuntu 14.04.

Java 7 musst du ja haben, obwohl nicht weiter erwähnt, sonst gibt es die Methode nicht…,
nach gerade so noch auffindbaren openjdk-Quellcode wird dort bei GraphicDevice nach Möglichkeit abgefragt,
das ist ziemlich nahe am System… da gibt es nicht viel zu drehen an Quellcode, Zusatz-Libraries (Netbeans-Framework…), Look & Feel usw. (pauschal behauptet)

Ubuntu 14.04 sagst du, auch sicher? :wink: nach grober Link-Übersicht sollte alles ab 11 oder spätetes 12, ergo seit ca 2011/12 ausreichen,
da wäre meine Dummy-Standard-Herangehensweise: auf anderen Rechner mit ähnlich hohen Ubuntu ausprobieren, hast du einen verfügbar?
ich freilich (auch) nicht,
habe noch ‚Ubuntu 14.04‘ in den Thementitel aufgenommen, vielleicht lockt das entsprechende her,

ansonsten wenn sich hier nix tut, nur so nebenbei, ich verweise eigentlich viel zu oft auf andere,
gibts vielleicht Ubuntu-Foren mit entsprechenden Menschen,
von denen manche auch Java kennen/ haben mögen und das dummyweise ausprobieren,
im Sonderfall evtl. gar Wissen dazu speziell zu Ubuntu

dort könnte natürlich auch wer sagen ‚frag in Java-Forum‘, vielleicht kommst du gar bereits von dort zu diesem Thema :wink:
(obwohl bisschen dürftig ausgestattete Frage), das sind die beiden Seiten

Also ich habe die Beispiele mit openjdk7, oracle jdk7 und oracle jdk8 getestet.

Und der Terminal spuckt folgendes aus:

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04 LTS
Release: 14.04
Codename: trusty

Wobei ich von Ubuntu 12.04LTS geupgradet habe.

Das funktioniert bei mir unter Ubuntu ebanfalls nicht. Allerdings lässt sich mit WindowTranslucency.PERPIXEL_TRANSLUCENT was hinbekommen:

public class GridTranslucentWindow extends JFrame {
    public GridTranslucentWindow() {
        super("Java 7 Per Pixel Translucency");

        setSize(300, 320);
        setUndecorated(true);

        add(new AlphaPanel(128));
        setBackground(new Color(0, 0, 0, 0));

        setLocationRelativeTo(null);
        setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();

                if (ge.getDefaultScreenDevice().isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency.PERPIXEL_TRANSLUCENT)) {
                    new GridTranslucentWindow();
                }
            }
        });
    }

    private class AlphaPanel extends JPanel {
        private AlphaPanel(int alpha) {
            setBackground(new Color(0, 0, 255, alpha));
        }
    }
}

Vielleicht genügt dir sowas ja.

Ok, das klappt. Nun muss ich nur noch das Image von der jeweiligen Component transparent bekommen. Das hatte mit meinem simulierten TransparentWindow schon geklappt, aber nun scheint sich da was zu behacken.

Danke schon mal. :slight_smile: