您好,登錄后才能下訂單哦!
swing自帶的窗體是不能夠滿足我們的應用需求的,所以需要制作任意圖片和形狀的JFrame框體,比如下圖:
并且可以設置窗體背景圖片的透明度
下面說明如何做到上圖的效果:
(1)首先你得需要一張好看的圖片,比如羊皮紙。但是這個下載的圖片是方方正正的矩形,羊皮紙的形狀在圖片的內部,所以我們用美圖秀秀或者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);//設置內容面板為透明 this.setContentPane(rp); this.setUndecorated(true); this.setSize(rp.img.getIconWidth(),rp.img.getIconHeight()); AWTUtilities.setWindowOpaque(this, false);//設置為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); } } }
上面的程序主要代碼在于:設置JFrame為透明,JFrame去掉邊框,設置內容面板為透明,然后將圖片畫到內容面板上。
(4)寫一個測試類Test:
import javax.swing.*; import java.awt.*; public class Test { public static void main(String[] args) { /** * 設置背景圖和背景圖的透明度,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)由于去掉了邊框,所以窗體不能拖動和拉伸,拖動和拉伸功能的實現見這篇文章swing實現窗體拖拽和拉伸
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。