java創(chuàng)建以任意圖片為背景的窗口
swing自帶的窗體是不能夠滿(mǎn)足我們的應(yīng)用需求的,所以需要制作任意圖片和形狀的JFrame框體,比如下圖:
并且可以設(shè)置窗體背景圖片的透明度
下面說(shuō)明如何做到上圖的效果:
(1)首先你得需要一張好看的圖片,比如羊皮紙。但是這個(gè)下載的圖片是方方正正的矩形,羊皮紙的形狀在圖片的內(nèi)部,所以我們用美圖秀秀或者PS中的摳圖功能將羊皮紙摳出來(lái),如下:
(2)將圖片保存為透明背景即可。
(3)接著寫(xiě)一個(gè)myJFrame繼承JFrame,代碼如下:
import com.sun.awt.AWTUtilities; import javax.swing.*; import java.awt.*; public class myJFrame extends JFrame{ private float alpha; public myJFrame(String bgPath,float alpha){ super(); myContentPane rp = new myContentPane(bgPath); rp.setOpaque(false);//設(shè)置內(nèi)容面板為透明 this.setContentPane(rp); this.setUndecorated(true); this.setSize(rp.img.getIconWidth(),rp.img.getIconHeight()); AWTUtilities.setWindowOpaque(this, false);//設(shè)置為JFrame為透明 this.alpha = alpha; } private class myContentPane extends JPanel{ public ImageIcon img; public myContentPane(String bgPath) { super(); img = new ImageIcon(Test.class.getResource(bgPath)); } @Override protected void paintComponent(Graphics g) { AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha); Composite old = ((Graphics2D) g).getComposite(); ((Graphics2D) g).setComposite(ac); if(img!=null){ g.drawImage(img.getImage(), 0, 0, getWidth(), getHeight(), this); } ((Graphics2D) g).setComposite(old); super.paintComponent(g); } } }
上面的程序主要代碼在于:設(shè)置JFrame為透明,JFrame去掉邊框,設(shè)置內(nèi)容面板為透明,然后將圖片畫(huà)到內(nèi)容面板上。
(4)寫(xiě)一個(gè)測(cè)試類(lèi)Test:
import javax.swing.*; import java.awt.*; public class Test { public static void main(String[] args) { /** * 設(shè)置背景圖和背景圖的透明度,0為全透明,1.0f為不透明。 */ myJFrame f = new myJFrame("ab.png",0.7f); f.setLayout(null); Font font = new Font("宋體",Font.PLAIN,30); JLabel user = new JLabel("用戶(hù)名"); user.setFont(font); user.setBounds(100,150,100,30); JTextField userInput = new JTextField(); userInput.setFont(font); userInput.setBounds(200,145,250,40); JLabel ps = new JLabel("密碼"); ps.setFont(font); ps.setBounds(110,200,90,30); JTextField psInput = new JTextField(); psInput.setFont(font); psInput.setBounds(200,195,250,40); f.add(user); f.add(userInput); f.add(ps); f.add(psInput); f.setLocation(300,100); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }
(5)由于去掉了邊框,所以窗體不能拖動(dòng)和拉伸,拖動(dòng)和拉伸功能的實(shí)現(xiàn)見(jiàn)這篇文章swing實(shí)現(xiàn)窗體拖拽和拉伸
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Spring定時(shí)任務(wù)實(shí)現(xiàn)與配置(二)
這篇文章主要為大家詳細(xì)介紹了Spring定時(shí)任務(wù)的實(shí)現(xiàn)與配置第二篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06CentOS?7.9服務(wù)器Java部署環(huán)境配置的過(guò)程詳解
這篇文章主要介紹了CentOS?7.9服務(wù)器Java部署環(huán)境配置,主要包括ftp服務(wù)器搭建過(guò)程、jdk安裝方法以及mysql安裝過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07Spring MVC---數(shù)據(jù)綁定和表單標(biāo)簽詳解
本篇文章主要介紹了Spring MVC---數(shù)據(jù)綁定和表單標(biāo)簽詳解,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-01-01Android?Java判斷密碼強(qiáng)度方法實(shí)例(強(qiáng)度顯示)
在現(xiàn)代社會(huì)中,密碼是確保我們個(gè)人信息和賬戶(hù)安全的重要手段之一,為了提高密碼的安全性,我們可以使用正則表達(dá)式來(lái)判斷密碼的強(qiáng)度,這篇文章主要給大家介紹了關(guān)于Android?Java判斷密碼強(qiáng)度(強(qiáng)度顯示)的相關(guān)資料,需要的朋友可以參考下2024-03-03計(jì)算一個(gè)Java對(duì)象占用字節(jié)數(shù)的方法
這篇文章主要介紹了計(jì)算一個(gè)Java對(duì)象占用字節(jié)數(shù)的方法,較為詳細(xì)的分析了Java中各類(lèi)對(duì)象所占用的字節(jié)數(shù),需要的朋友可以參考下2015-01-01Vue.Js及Java實(shí)現(xiàn)文件分片上傳代碼實(shí)例
這篇文章主要介紹了Vue.Js及Java實(shí)現(xiàn)文件分片上傳代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06