簡體   English   中英

AWTUtilities透明JFrame

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM