当前位置:天才代写 > tutorial > JAVA 教程 > java swing如何添加配景图片并能按照窗口巨细举办缩放

java swing如何添加配景图片并能按照窗口巨细举办缩放

2017-11-02 08:00 星期四 所属: JAVA 教程 浏览:59

前段时间在用JAVA SWING做个客户端的时候,有要在一块主面板上添加配景图片的需求,于是本身在网上找了些资料研究一下,有些网友说用JLabel来做,通过配置它的icon属性来实现,但小我私家感受这种做法很HACK,呵呵,并且这种要领容易带来在上面的内容被遮住等等的问题,所以小我私家更喜欢用一个担任JPanel的类来实现的要领,其实我感受它跟Web中的层的观念有几分相似吧,只需要把这个“层”加到面板的最下面,作为垫底的,就OK了,来看看奈何实现它:

import javax.swing.JPanel;  
import java.awt.Graphics;  
import java.awt.Graphics2D;  
import java.awt.Toolkit;  
import java.awt.Image;  
/** 
 * 图单方面板,窗体需要加配景图片时用 
 * @author [email protected] 
 */
public class CustomImgPanel extends JPanel{  
    private int width = 0;  
    private int height = 0;  
    private String imgPath = "";  
    /** 
     * 
     * @param _width 整型,窗口的宽度 
     * @param _height 整型,窗口的高度 
     * @param _imgPath 图片的URL,可用相对路径 
     */
    public CustomImgPanel(int _width,int _height,String _imgPath){  
        width = _width;  
        height = _height;  
        imgPath = _imgPath;  
        setSize(width,height);  
        setVisible(true);  
    }  
    /** 
     * 
     * @param _width 浮点型,窗口的宽度 
     * @param _height 浮点型,窗口的高度 
     * @param _imgPath  字符串,图片的URL,可用相对 
     */
    public CustomImgPanel(double _width,double _height,String _imgPath){  
        width = (int)_width;  
        height = (int)_height;  
        imgPath = _imgPath;  
        setSize(width,height);  
        setVisible(true);  
    }  
      
    @Override
    public void paintComponent(Graphics gs) {  
        Graphics2D g = (Graphics2D) gs;  
        super.paintComponent(g);  
        //画配景图片  
        Image image = Toolkit.getDefaultToolkit().getImage(getClass().getResource(imgPath));  
        g.drawImage(image, 0, 0,width,height, this);  
    }  
}

上面是界说CustomImgPanel这个类的代码,下面看奈何利用它:

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

查察本栏目

由于 我的窗口默认环境是最大化的,所以我取的高度和宽度是屏幕的高度和宽度,这个各人按照本身的环境来调解咯,好了,初始化的时候设好了,那当用户改变窗口的巨细的时候假如图片巨细不改变的话会很丢脸,这会导致老板的表情也很丢脸,呵呵,所以需要监听一个父窗口的巨细变革,并按照环境来调解图片的巨细,这样才显得较量智能,嘿嘿,有代码有真相:

/** 
     * 监听最外层窗口的resize事件,并按照新的窗口巨细来调解配景图片的尺寸 
     * @param evt 
     */
    private void formComponentResized(java.awt.event.ComponentEvent evt) {                                        
        // TODO add your handling code here:  
        try{  
            this.mainPanel.remove(imgPanel);  
        }catch(Exception e){  
        }  
        imgPanel = null;  
        Dimension newSize = evt.getComponent().getSize();  
        imgPanel = new CustomImgPanel(newSize.getWidth(),newSize.getHeight()-70,"../form/images/mainBg.jpg");  
        this.mainPanel.add(imgPanel,-1);  
    }

这个是外层JFrame的监听要领,当改变巨细事件触发时,为了制止配景面板重叠或其它不须要的异常环境产生,所以先挪用remove要领移除,再设为null清空一次,最后再从头生成并加到-1层中。这样就大功告成啦。

 

    关键字:


天才代写-代写联系方式