[英]AWTUtilities Transparent JFrame
使用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();
}
它使外翻透明可以保持組件不透明。
您可以嘗試僅為幀的背景顏色設置Alpha通道,該通道不應下降到組件。
window.setBackground(new Color(1.0, 1.0, 1.0, 0.25));
應該給你一個白色透明的窗口。
您仍然可以使用AWTUtilities類,而不是使用setWindowOpacity()setWindowOpaque()設置不透明度。 這將關閉窗口的背景,但您在窗口內繪制的任何內容仍將像以前一樣繪制。 截至最近的Java 6更新,現在這是正確的做事方式。 AWTUtilities適用於Mac和MS Windows。 這些方法將在Java 7中移植到java.awt.Window中。
您需要設置子組件的不透明度,例如
childComponent.setOpaque(true);
這將使它們不透明,而不會使框架不透明。
我想通過以下內容擴展先前的答案。 這將創建一個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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.