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


  • 10
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以通过以下步骤为 JFrame 设置背景图片: 1. 创建一个 JPanel,并将其设置为 JFrame 的 content pane。可以使用以下代码: ``` JPanel panel = new JPanel() { @Override protected void paintComponent(Graphics g) { super.paintComponent(g); // 绘制背景图片 ImageIcon imageIcon = new ImageIcon("path/to/image.jpg"); Image image = imageIcon.getImage(); g.drawImage(image, 0, 0, this); } }; frame.setContentPane(panel); ``` 2. 在 JPanel 的 paintComponent 方法,绘制背景图片。可以使用 ImageIcon 和 Image 类加载图片,并使用 Graphics 的 drawImage 方法将其绘制到 JPanel 上。 注意:在使用 ImageIcon 加载图片时,需要指定正确的图片路径。 完整代码如下: ``` import java.awt.Graphics; import java.awt.Image; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JPanel; public class BackgroundImageFrame extends JFrame { public BackgroundImageFrame() { JPanel panel = new JPanel() { @Override protected void paintComponent(Graphics g) { super.paintComponent(g); // 绘制背景图片 ImageIcon imageIcon = new ImageIcon("path/to/image.jpg"); Image image = imageIcon.getImage(); g.drawImage(image, 0, 0, this); } }; setContentPane(panel); setSize(500, 500); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public static void main(String[] args) { new BackgroundImageFrame(); } } ``` 在上面的代码,我们创建了一个 JFrame 对象,并将其 content pane 设置为一个自定义的 JPanel。在 JPanel 的 paintComponent 方法,我们加载了一张背景图片,并将其绘制到 JPanel 上。运行程序后,你应该能够看到 JFrame背景图片已经被设置了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值