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);