概要:
JFrame中没有直接设置背景图片的方法,所以我们就需要自己动手来给他加个背景图片。效果展示:
核心代码:
[Java]
1 2 3 4 5 6 7 8 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 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("真知谷科技:https://www.wendangku.net/doc/546984070.html,");
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);
38
39
40
41
42
//------- 6. 把背景图片添加到分层窗格的最底层作为背景 ----------------
f.getLayeredPane().add(label,new Integer(Integer.MIN_VALUE));
}
}
1程序分析
第一部分:构建了一个简单的窗体,我们接下来将会为它设置背景图片。
第二部分:设置窗体中的ContenPane层透明,因为我们要把背景图片放到它下面的图层里。
第三部分:准备好背景图和图片框,接下来就是大小的计算了。
第四部分:常规模式:把图像设置到JLabel中,设置JLabel大小和图像大小相同。
第五部分:拉伸模式:获取窗体的宽度和高度,将图像进行相应缩放然后设置到JLabel中。
第六部分:将设置好的JLabel添加到窗体的LayeredPane中,放到最底层。
第四部分和第五部分是两种不同的背景模式,使用其中一种即可。
2重点方法说明
1.getScaledInstance(第35行):
可以对图像进行缩放,共有3个参数,分别是宽度、高度和缩放模式,通过此方法可以得到一个缩放后的新图像,缩放模式有如下几种可供选择:Image.SCALE_SMOOTH //平滑优先
Image.SCALE_FAST//速度优先
Image.SCALE_AREA_AVERAGING //区域均值
Image.SCALE_REPLICATE //像素复制型缩放
Image.SCALE_DEFAULT //默认缩放模式
3背景随窗体大小改变
以上代码可以设置一个背景,但你会发现,窗体大小变化时背景不会一起变,所以我们还需要一些其他的处理,而且一个窗体多次设置背景时又该如何处理呢?这些功能的具体实现,这里就不说了,我已经写好了一个类,专门用来为JFrame设置背景图片,用法十分简单。
4ZZBackGround
选中项目,右键→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);
5示例程序
[Java]
1 2 3 4 5 6 7 8 9
10
11
12 public static void main(String[] args) {
JFrame f = new JFrame();
f.setSize(600, 400);
f.setTitle("真知谷科技:https://www.wendangku.net/doc/546984070.html,");
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); }
6原文链接、下载地址
https://www.wendangku.net/doc/546984070.html,/read.php?tid=43&fid=6&page=1