Как поддерживать прозрачность JFrame в Linux - PullRequest
0 голосов
/ 03 июля 2018

Я делаю Java-приложение Swing, которое выполняется на Linux-машине и отображается на компьютере пользователя при пересылке X11.

Я хочу применить закругленные углы к JFrame, поэтому я изменил его фон на новый 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)

Без изменения его фона отлично работает на обоих, но фон по умолчанию также отображается.
Есть ли способ сделать закругленные углы ??
Спасибо.

1 Ответ

0 голосов
/ 03 июля 2018

Не каждая платформа поддерживает прозрачность.

Взгляните на 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 обеспечивает прозрачность!

EDIT Только что сделал тест, через ssh -X, java версия 1.8.0_162-b12 и это работает. Какая у вас версия java?

enter image description here

...