中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-09-16 09:09:24 來源:腳本之家 閱讀:114 作者:_Thomas 欄目:編程語言

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

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

珠海市| 黄大仙区| 神池县| 瓮安县| 万源市| 达日县| 通海县| 长宁县| 孝感市| 文登市| 木兰县| 龙胜| 红安县| 鄂温| 海林市| 彝良县| 图们市| 屏东市| 牡丹江市| 米脂县| 泰和县| 乌鲁木齐市| 泰顺县| 盐边县| 广南县| 河西区| 屏边| 和田市| 泽普县| 揭东县| 武城县| 莱西市| 平泉县| 和静县| 平果县| 南昌县| 博乐市| 海南省| 白城市| 阿克陶县| 绵阳市|