3

使用来自 sun 的这篇文章。我正在尝试创建一个透明窗口。

我在框架上的标签内有一张图像。我希望图像可见但框架不可见。

当我使用


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

4 回答 4

1

您可以尝试为框架的背景颜色设置 alpha 通道,这不应该下降到组件。

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

应该给你一个白色的透明窗口。

于 2009-07-29T16:54:57.190 回答
1

您仍然可以使用 AWTUtilities 类,但不要使用 setWindowOpacity() setWindowOpaque() 设置不透明度。这将关闭窗口的背景,但您在窗口内绘制的任何内容仍将像以前一样绘制。在最近的 Java 6 更新中,这是现在做事的正确方法。AWTUtilities 可以在 Mac 和 MS Windows 上运行。这些方法将在 Java 7 中移动到 java.awt.Window 本身。

于 2010-12-01T03:56:40.730 回答
0

您需要设置子组件的不透明度,例如

childComponent.setOpaque(true);

这将使它们不透明,而不会使框架不透明。

于 2009-07-29T16:59:08.040 回答
0

我想用以下内容扩展先前的答案。这将创建一个透明度为 0.05 或 255 中的 12.75 的窗口。然后将组件设置为 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);
于 2012-10-05T17:33:26.623 回答