java swing 怎样添加背景图片并且能根据窗口大小进行缩放(来自网络)

前段时间在用JAVASWING做个客户端的时候,有要在一块主面板上添加背景图片的需求,于是自己在网上找了些资料研究一下,有些网友说用JLabel来做,通过设置它的icon属性来实现,但个人感觉这种做法很HACK,呵呵,而且这种方法容易带来在上面的内容被遮住等等的问题,所以个人更喜欢用一个继承JPanel的类来实现的方法,其实我感觉它跟Web中的层的概念有几分相似吧,只需要把这个“层”加到面板的最下面,作为垫底的,就OK了,来看看怎样实现它:

 

  1. import javax.swing.JPanel;  
  2. import java.awt.Graphics;  
  3. import java.awt.Graphics2D;  
  4. import java.awt.Toolkit;  
  5. import java.awt.Image;  
  6.   
  7. public class CustomImgPanel extends JPanel{  
  8.     private int width 0;  
  9.     private int height 0;  
  10.     private String imgPath "";  
  11.       
  12.     public CustomImgPanel(int _width,int _height,String _imgPath){  
  13.         width _width;  
  14.         height _height;  
  15.         imgPath _imgPath;  
  16.         setSize(width,height);  
  17.         setVisible(true);  
  18.      
  19.       
  20.     public CustomImgPanel(double _width,double _height,String _imgPath){  
  21.         width (int)_width;  
  22.         height (int)_height;  
  23.         imgPath _imgPath;  
  24.         setSize(width,height);  
  25.         setVisible(true);  
  26.      
  27.   
  28.     @Override  
  29.     public void paintComponent(Graphics gs)  
  30.         Graphics2D (Graphics2D) gs;  
  31.         super.paintComponent(g);  
  32.         //画背景图片  
  33.         Image image Toolkit.getDefaultToolkit().getImage(getClass().getResource(imgPath));  
  34.         g.drawImage(image, 0, 0,width,height, this);  
  35.      
  36.  

上面是定义CustomImgPanel这个类的代码,下面看怎样使用它

  1. double panelWidth Toolkit.getDefaultToolkit().getScreenSize().getWidth();  
  2. double panelHeight Toolkit.getDefaultToolkit().getScreenSize().getHeight() 25 25 20;//(两个25是内外两个窗口标题栏的高度,20是底部更新进度栏的高度)  
  3. imgPanel new CustomImgPanel(panelWidth,panelHeight,"../form/images/mainBg.jpg");  
  4. this.mainPanel.add(imgPanel,-1);//参数-1的作用是让这个背景图片面板保持在所有面板的最下面,相当于WEB中的z-index属性  

由于我的窗口默认情况是最大化的,所以我取的高度和宽度是屏幕的高度和宽度,这个大家根据自己的情况来调整咯,好了,初始化的时候设好了,那当用户改变窗口的大小的时候如果图片大小不改变的话会很难看,这会导致老板的脸色也很难看,呵呵,所以需要监听一个父窗口的大小变化,并根据情况来调整图片的大小,这样才显得比较智能,嘿嘿,有代码有真相:

 

  1.   
  2.     private void formComponentResized(java.awt.event.ComponentEvent evt)                                        
  3.         // TODO add your handling code here:  
  4.         try 
  5.             this.mainPanel.remove(imgPanel);  
  6.         }catch(Exception e){  
  7.          
  8.         imgPanel null 
  9.         Dimension newSize evt.getComponent().getSize();  
  10.         imgPanel new CustomImgPanel(newSize.getWidth(),newSize.getHeight()-70,"../form/images/mainBg.jpg");  
  11.         this.mainPanel.add(imgPanel,-1);  
  12.      

 这个是外层JFrame的监听方法,当改变大小事件触发时,为了避免背景面板重叠或其它不必要的异常情况发生,所以先调用remove方法移除,再设为null清空一次,最后再重新生成并加到-1层中。这样就大功告成啦。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值