如何在 Linux 上支持 JFrame 透明

问题描述 投票:0回答:2

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

我想在 JFrame 上应用圆角,所以我将它的背景更改为 new Color(0,0,0,0)。
该框架现在隐藏在我的计算机上(Windows 10)。但是linux(centOS7)好像不支持Window Frame transparency。

它在下面返回错误。

    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
2个回答
0
投票

不是每个平台都支持透明度。

看看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版本是多少?


0
投票

CentOS 7 中的Java 版本是否与您编译时使用的Java 版本匹配?尝试用CentOS 7中的Java版本重新编译,看是否出现同样的错误。

© www.soinside.com 2019 - 2024. All rights reserved.