【问题标题】:How to Support JFrame transparency on Linux如何在 Linux 上支持 JFrame 透明性
【发布时间】:2018-07-03 17:37:27
【问题描述】:

我正在制作一个 java swing 应用程序,它在 linux 机器上执行并通过 X11 转发显示在用户的计算机上。

我想在 JFrame 上应用圆角,所以我将其背景更改为 new Color(0,0,0,0)。
该框架现在隐藏在我的计算机上(Windows 10)。但是 linux(centOS7) 似乎不支持窗口框架透明度。

它在下面返回错误。

    Exception in thread "AWT-EventQueue-0" 
    java.lang.UnsupportedOperationException: PERPIXEL_TRANSLUCENT translucency is not supported
    at java.awt.Window.setBackground(Window.java:3844)
    at java.awt.Frame.setBackground(Frame.java:988)

不改变其背景在两者上都可以正常工作,但也会显示默认背景。
有什么办法可以做圆角吗??
谢谢。

【问题讨论】:

    标签: swing rounded-corners


    【解决方案1】:

    并非每个平台都支持透明度。

    看看https://docs.oracle.com/javase/tutorial/uiswing/misc/trans_shaped_windows.html

    章节 确定平台的功能

    import static java.awt.GraphicsDevice.WindowTranslucency.*;
    
    // Determine what the default GraphicsDevice can support.
    GraphicsEnvironment ge =
        GraphicsEnvironment.getLocalGraphicsEnvironment();
    GraphicsDevice gd = ge.getDefaultScreenDevice();
    
    boolean isUniformTranslucencySupported =
        gd.isWindowTranslucencySupported(TRANSLUCENT);
    boolean isPerPixelTranslucencySupported =
        gd.isWindowTranslucencySupported(PERPIXEL_TRANSLUCENT);
    boolean isShapedWindowSupported =
        gd.isWindowTranslucencySupported(PERPIXEL_TRANSPARENT);
    

    有待测试,但我不认为 X11 转发允许透明!

    编辑 刚刚做了个测试,通过ssh -X,java版本1.8.0_162-b12 它有效。 你的java版本是多少?

    【讨论】:

    • 通过 X11,返回 false、false 和 true。这意味着我不能使边界变窄,是吗?请...我必须成功。我都尝试过 java 6 和 8 但都一样。
    • 您至少需要 Java 7。试试这个例子:docs.oracle.com/javase/tutorial/uiswing/examples/misc/…。顺便说一句,我使用的是 Oracle 的 JVM,而不是 OpenJDK 的
    猜你喜欢
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    相关资源
    最近更新 更多