import javax.swing.JFrame;
import javax.swing.JSlider;public class TransparentFrame extends JFrame {public TransparentFrame() {setTitle('Transparent Frame');setSize(400,400);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JSlider slider = new JSlider(JSlider.HORIZONTAL);add(slider);setVisible(true);}public static void main(String[] args) {new TransparentFrame();}
}
其輸出將是:

現在將更改偵聽器添加到滑塊,以便我們可以對其進行監視。
slider.addChangeListener(new ChangeListener() {@Overridepublic void stateChanged(ChangeEvent e) {}
});
現在,我們將在此方法中編寫透明性邏輯,但是在執行此操作之前,首先讓我們看看如何使JFrame透明。
為了使JFrame透明,java具有一個內置的實用程序類AWTUtilities 。 通過使用此類提供的方法,我們可以使JFrame透明。 以下是該代碼:
AWTUtilities.setWindowOpacity(window, floatOpacity);
參數:
窗口–您的框架/窗口對象。
floatOpactity-在0到1之間。1表示不透明,0表示完全透明。
因此,現在我們知道我們必須將此邏輯添加到滑塊更改事件,并將滑塊值指定為floatOpacity值。 因此對于以下狀態更改stateChanged()方法:
@Override
public void stateChanged(ChangeEvent e) {JSlider slider = (JSlider) e.getSource();if(!slider.getValueIsAdjusting()){AWTUtilities.setWindowOpacity(TransparentFrame.this, slider.getValue());}
}
認為已經完成。 不,我們仍然必須確保不透明度值不超過其0.0f到1.0f的限制。 因此,我們必須將滑塊限制為這些值。 由于滑塊不支持點值,因此我們將以10的倍數取值,然后將它們除以100得到所需的值。 為此,我們將更改JSlider聲明和stateChanged,如下所示:
JSlider slider = new JSlider(JSlider.HORIZONTAL, 10, 100, 100);
在stateChanged方法中更改以下行:
AWTUtilities.setWindowOpacity(TransparentFrame.this, slider.getValue()/100f);
因此,現在當我們運行該程序時,我們會看到一個框架,其中帶有一個設置為結束的滑塊。 當我們更改滑塊時,框架會相應地更改其透明度。
輸出:

注意:
要在Eclipse中使用AWTUtilities類,您需要更改首選項設置,否則訪問受限類可能會出錯。 要更改設置,請執行以下操作:
- 右鍵單擊您的項目。 選擇屬性。
- 選擇Java編譯器并將其展開。
- 選擇錯誤/警告。
- 啟用項目特定的設置。
- 在“不建議使用和限制的API”中,您將找到“禁止引用(訪問規則)”。將其更改為“警告”或“忽略”
參考: harryjoy博客上的JCG合作伙伴 Harsh Raval 使JFrame透明 。
翻譯自: https://www.javacodegeeks.com/2012/09/make-jframe-transparent.html