国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Java > 正文

java創建以任意圖片為背景的窗口

2024-07-13 10:15:17
字體:
來源:轉載
供稿:網友

swing自帶的窗體是不能夠滿足我們的應用需求的,所以需要制作任意圖片和形狀的JFrame框體,比如下圖:

java,圖片,背景,窗口

并且可以設置窗體背景圖片的透明度

java,圖片,背景,窗口

下面說明如何做到上圖的效果:

(1)首先你得需要一張好看的圖片,比如羊皮紙。但是這個下載的圖片是方方正正的矩形,羊皮紙的形狀在圖片的內部,所以我們用美圖秀秀或者PS中的摳圖功能將羊皮紙摳出來,如下:

java,圖片,背景,窗口

(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實現窗體拖拽和拉伸

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 梁平县| 辰溪县| 同仁县| 台东县| 涿州市| 马鞍山市| 赞皇县| 庆云县| 玛多县| 墨玉县| 齐齐哈尔市| 郴州市| 岑巩县| 平舆县| 清水河县| 和硕县| 柘城县| 永和县| 吉隆县| 华安县| 改则县| 措美县| 翼城县| 北川| 容城县| 手游| 奈曼旗| 仲巴县| 贡觉县| 马尔康县| 察隅县| 仪征市| 台南县| 自贡市| 顺昌县| 罗山县| 涡阳县| 宜宾县| 宁明县| 上林县| 宁明县|