您好,登錄后才能下訂單哦!
swing自帶的窗體是不能夠滿足我們的應(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("用戶名"); 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í)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。