欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

java创建以任意图片为背景的窗口

时间:2021-08-10 09:24:27|栏目:JAVA代码|点击:

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实现窗体拖拽和拉伸

上一篇:Java静态代理和动态代理的深入讲解

栏    目:JAVA代码

下一篇:java使用动态代理来实现AOP(日志记录)的实例代码

本文标题:java创建以任意图片为背景的窗口

本文地址:http://www.codeinn.net/misctech/165626.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有