JAVA JFrame窗体添加背景图像的两种方法

首先还是要了解框架JFrame中的层次结构。JFrame中的层次分布及相对关系是:最底层是:JRootPane;第二层是:JlayerPane;最上层就是ContentPane,也正是我们常说的内容面板。所以一般我们拖放的控件就是在ContentPane层上。有了这些常识后我们就可以随意设计背景了。在这里笔者提供两种方法为一个frame设置一张背景图片方法一: 
原理:我们把图片放置在第二层:JlayerPane容器上,然后让最上层的:ContentPane透明,这样就实现了背景的设置。(当然把图片放置最低层,让上面两层透明也是可以的)
    代码如下:
package NewPackage;

import java.awt.Container;
import java.awt.FlowLayout;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Demo2 {
public static void main(String[] args) {
JFrame f1=new JFrame("插入背景图像");
f1.setBounds(400, 200, 500, 300);
f1.setVisible(true);
f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ImageIcon img=new ImageIcon("D:\\cat.png");

JLabel bg=new JLabel(img);
f1.getLayeredPane().add(bg, new Integer(Integer.MIN_VALUE));
bg.setBounds(0, 0, img.getIconWidth(), img.getIconHeight());
JPanel jp= (JPanel)f1.getContentPane();//强制类型转换
//Container contain = f1.getContentPane();
//((JPanel) contain).setOpaque(false); //
jp.setOpaque(false);
jp.setLayout(new FlowLayout());
//contain.setLayout(new FlowLayout());
//contain.add(bg);
jp.add(bg);
}
}


方法二: 
原理:我们直接在最上层容器内重写paintComponent(Graphics g)方法在容器中画一张图片。(这种方法很直观,原理很简单)。代码如下:
package NewPackage;

import java.awt.Graphics;
import java.awt.Image;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Demo3 extends JFrame{
//创建一个容器
JPanel jp;
//创建背景面板。
BackgroundPanel bgp;
//创建一个按钮,用来证明我们的确是创建了背景图片,而不是一张图片。
JButton jb;
public static void main(String[] args){
new Demo3();
}
public Demo3(){
//不采用任何布局方式。
jp=(JPanel)this.getContentPane();
this.setLayout(null);
//在这里随便找一张400*300的照片既可以看到测试结果。
ImageIcon img=new ImageIcon("D:\\cat.png");
bgp=new BackgroundPanel(img.getImage());
bgp.setBounds(0,0,img.getIconWidth(),img.getIconHeight());
//创建按钮
jb=new JButton("测试按钮");
                
bgp.add(jb);
jp.add(bgp);
this.setBounds(400, 200, 500, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}

class BackgroundPanel extends JPanel{
Image im;
public BackgroundPanel(Image im){
this.im=im;
this.setOpaque(true);
}
//Draw the back ground.
public void paintComponent(Graphics g){
super.paintComponents(g);
g.drawImage(im,0,0,this.getWidth(),this.getHeight(),this);
}

}



程序运行效果如下:

参考:https://wenku.baidu.com/view/3db3c2e7524de518964b7d6a.html


已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页