swing自帶的窗體是不能夠滿足我們的應(yīng)用需求的,所以需要制作任意圖片和形狀的JFrame框體,比如下圖:
創(chuàng)新互聯(lián)堅信:善待客戶,將會成為終身客戶。我們能堅持多年,是因為我們一直可值得信賴。我們從不忽悠初訪客戶,我們用心做好本職工作,不忘初心,方得始終。十載網(wǎng)站建設(shè)經(jīng)驗創(chuàng)新互聯(lián)是成都老牌網(wǎng)站營銷服務(wù)商,為您提供網(wǎng)站設(shè)計制作、網(wǎng)站設(shè)計、網(wǎng)站設(shè)計、H5開發(fā)、網(wǎng)站制作、成都品牌網(wǎng)站建設(shè)、微信小程序定制開發(fā)服務(wù),給眾多知名企業(yè)提供過好品質(zhì)的建站服務(wù)。
并且可以設(shè)置窗體背景圖片的透明度
下面說明如何做到上圖的效果:
(1)首先你得需要一張好看的圖片,比如羊皮紙。但是這個下載的圖片是方方正正的矩形,羊皮紙的形狀在圖片的內(nèi)部,所以我們用美圖秀秀或者PS中的摳圖功能將羊皮紙摳出來,如下:
(2)將圖片保存為透明背景即可。
(3)接著寫一個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)容面板為透明,然后將圖片畫到內(nèi)容面板上。
(4)寫一個測試類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("用戶名"); 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)由于去掉了邊框,所以窗體不能拖動和拉伸,拖動和拉伸功能的實現(xiàn)見這篇文章swing實現(xiàn)窗體拖拽和拉伸
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。
網(wǎng)站名稱:java創(chuàng)建以任意圖片為背景的窗口
URL分享:http://www.rwnh.cn/article46/gcgpeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、服務(wù)器托管、微信公眾號、品牌網(wǎng)站制作、用戶體驗、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)