java 把图片插入窗体,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);

}

}

程序运行效果如下:

978060f1ff3f203c49c9bde2f9b35d22.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值