JFrame设置背景图片

概要:

JFrame中没有直接设置背景图片的方法,所以我们就需要自己动手来给他加个背景图片。

| |目录

核心代码:

package com.zhenzhigu.background;
       
import java.awt.Image;
       
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
       
public class ZZBackGroundCore {
       
    public static void main(String[] args) {
        //------------------------ 1. 基本窗体设置 --------------------------
        JFrame f = new JFrame();
        f.setTitle("真知谷科技:www.zhenzhigu.com");
        f.setSize(600, 400);
        f.setVisible(true);
               
        //------------------------ 2. 设置ContentPane透明 --------------------
        //把内容窗格转化为JPanel,否则不能用方法setOpaque()来使内容窗格透明
        JPanel imagePanel = (JPanel) f.getContentPane();
        imagePanel.setOpaque(false);
               
        //------------------------ 3. 图片框/背景图 -------------------------
        JLabel label = new JLabel();
        ImageIcon icon = new ImageIcon("c:/img.jpg");
               
        //------------------------ 4. 常规背景:图片原始大小 ------------------
        label.setIcon(icon);
        label.setBounds(0, 0, icon.getIconWidth(),icon.getIconHeight());
               
        //------------------------ 5. 拉伸背景:适应窗体大小 ------------------
        int w = f.getLayeredPane().getWidth();
        int h = f.getLayeredPane().getHeight();
        Image img = icon.getImage().getScaledInstance(w, h, Image.SCALE_FAST);
        label.setIcon(new ImageIcon(img));
        label.setBounds(0, 0, w,h);
               
        //------- 6. 把背景图片添加到分层窗格的最底层作为背景 ----------------
        f.getLayeredPane().add(label,new Integer(Integer.MIN_VALUE));
    }
}

程序分析 

第一部分:构建了一个简单的窗体,我们接下来将会为它设置背景图片。 

第二部分:设置窗体中的ContenPane层透明,因为我们要把背景图片放到它下面的图层里。 

第三部分:准备好背景图和图片框,接下来就是大小的计算了。 

第四部分:常规模式:把图像设置到JLabel中,设置JLabel大小和图像大小相同。 

第五部分:拉伸模式:获取窗体的宽度和高度,将图像进行相应缩放然后设置到JLabel中。 

第六部分:将设置好的JLabel添加到窗体的LayeredPane中,放到最底层。 


第四部分和第五部分是两种不同的背景模式,使用其中一种即可。 


重点方法说明

1.getScaledInstance(第35行): 

可以对图像进行缩放,共有3个参数,分别是宽度、高度和缩放模式,通过此方法可以得到一个缩放后的新图像,缩放模式有如下几种可供选择: 

Image.SCALE_SMOOTH //平滑优先 

Image.SCALE_FAST//速度优先 

Image.SCALE_AREA_AVERAGING //区域均值 

Image.SCALE_REPLICATE //像素复制型缩放 

Image.SCALE_DEFAULT //默认缩放模式 



背景随窗体大小改变 

以上代码可以设置一个背景,但你会发现,窗体大小变化时背景不会一起变,所以我们还需要一些其他的处理,而且一个窗体多次设置背景时又该如何处理呢?这些功能的具体实现,这里就不说了,我已经写好了一个类,专门用来为JFrame设置背景图片,用法十分简单。 



ZZBackGround 

选中项目,右键→BuildPath→ConfigureBuildPath→Libraries→AddExternalJars,选择下载的ZZBackGround.jar文件,这样就将jar包引入到你的项目中了。 

引入后就可以在程序中调用ZZBackGround.showTest();就可以观看效果。


调用ZZBackGround.showTest();会自动生成一个窗体,背景是填充的,也会随着窗体大小的改变而改变,下面来看一下如何设置背景图片: 

假如你有一个JFrame窗体叫fre,有一张图片路径为C:/abc/3.jpg,然后: 

ZZBackGround.setBackBround(fre, "C:/abc/3.jpg", ZZBackGround.FILL); 

这样就把3.jpg设置为fre的背景了。 

如果想让背景是原图的大小,就这样写: 

ZZBackGround.setBackBround(fre, "C:/abc/3.jpg", ZZBackGround.NORMAL); 



示例程序

public static void main(String[] args) {
        JFrame f = new JFrame();
        f.setSize(600, 400);
        f.setTitle("真知谷科技:www.zhenzhigu.com");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLocationRelativeTo(null);
        f.setLayout(new FlowLayout());
        f.add(new JButton("按钮" + i));
        f.setVisible(true);
   
        ZZBackGround.setBackBround(fre, "c:/abc/3.jpg", ZZBackGround.FILL);
}


原文链接、下载地址

http://www.zhenzhigu.com/read.php?tid=43&fid=6&page=1


评论关闭
评论 还能输入200
评论关闭
评论 还能输入200
资料加载中...
已关注 , 取消