AWTUtilities Прозрачный JFrame - PullRequest
3 голосов
/ 29 июля 2009

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

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

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


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 ]

1 голос
/ 01 декабря 2010

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

1 голос
/ 29 июля 2009

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

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

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

0 голосов
/ 05 октября 2012

Я хотел бы расширить предыдущий ответ следующим. Это создаст окно с прозрачностью 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);
0 голосов
/ 29 июля 2009

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

childComponent.setOpaque(true);

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

...