AWTUtilities Прозрачный JFrame

Используя эту статью от солнца. Я пытаюсь создать прозрачное окно.

У меня есть одно изображение внутри этикетки на раме. Я хочу, чтобы изображение было видимым, а рамка - невидимой.

Когда я использую


try {
   Class awtUtilitiesClass = Class.forName("com.sun.awt.AWTUtilities");
   Method mSetWindowOpacity = awtUtilitiesClass.getMethod("setWindowOpacity", Window.class, float.class);
   mSetWindowOpacity.invoke(null, window, Float.valueOf(0.75f));
} catch (NoSuchMethodException ex) {
   ex.printStackTrace();
} catch (SecurityException ex) {
   ex.printStackTrace();
} catch (ClassNotFoundException ex) {
   ex.printStackTrace();
} catch (IllegalAccessException ex) {
   ex.printStackTrace();
} catch (IllegalArgumentException ex) {
   ex.printStackTrace();
} catch (InvocationTargetException ex) {
   ex.printStackTrace();
}

Это делает все прозрачным, что делает компоненты не прозрачными.

4 ответа

Решение

Вы можете попробовать просто установить альфа-канал для цвета фона вашего кадра, который не должен переходить на компоненты.

window.setBackground(new Color(1.0, 1.0, 1.0, 0.25));

должен дать вам белое прозрачное окно.

Вы все еще можете использовать класс AWTUtilities, но вместо установки непрозрачности с помощью setWindowOpacity() setWindowOpaque(). Это отключит фон окна, но все, что вы рисуете внутри окна, все равно будет рисоваться, как и раньше. Что касается недавних обновлений Java 6, то теперь это правильный путь. AWTUtilities будет работать как на Mac, так и на MS Windows. Эти методы будут перемещены в сам java.awt.Window в Java 7.

Вам нужно установить непрозрачность дочерних компонентов, что-то вроде

childComponent.setOpaque(true);

Это сделает их непрозрачными, не делая рамку непрозрачной.

Я хотел бы расширить предыдущий ответ следующим. Это создаст окно с прозрачностью 0,05 или 12,75 из 255. Тогда для компонентов будет установлена ​​прозрачность 0,50f, это будет влиять только на кликабельные компоненты. У таких ярлыков, которые не активируются, как у ярлыков, прозрачность может быть установлена ​​равной любой. Это, однако, исправляет проблему с активируемыми компонентами изменения цвета.

JWindow subFrame = new JWindow();           
subFrame.setBounds(0, 0, 500, 500);
subFrame.setAlwaysOnTop(true);
subFrame.setOpacity(0.50f);
subFrame.setBackground(new Color(1.0f, 1.0f, 1.0f, 0.05f));

JButton button = new JButton("Hello");
button.setBounds(20, 180, 100, 40);

subFrame.getContentPane().setLayout(null);
subFrame.getContentPane().add(button);
subFrame.setVisible(true);
Другие вопросы по тегам