转载:http://blog.csdn.net/jdsjlzx/article/details/16831815

import java.awt.FlowLayout;

import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

public class JFrameBackground {

private JFrame frame = new JFrame("背景图片测试");

private JPanel imagePanel;

private ImageIcon background;

public static void main(String[] args) {

new JFrameBackground();

}

public JFrameBackground() {

background = new ImageIcon("003.jpg");// 背景图片

JLabel label = new JLabel(background);// 把背景图片显示在一个标签里面

// 把标签的大小位置设置为图片刚好填充整个面板

label.setBounds(0, 0, background.getIconWidth(),

background.getIconHeight());

// 把内容窗格转化为JPanel,否则不能用方法setOpaque()来使内容窗格透明

imagePanel = (JPanel) frame.getContentPane();

imagePanel.setOpaque(false);

// 内容窗格默认的布局管理器为BorderLayout

imagePanel.setLayout(new FlowLayout());

imagePanel.add(new JButton("测试按钮"));

frame.getLayeredPane().setLayout(null);

// 把背景图片添加到分层窗格的最底层作为背景

frame.getLayeredPane().add(label, new Integer(Integer.MIN_VALUE));

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setSize(background.getIconWidth(), background.getIconHeight());

frame.setResizable(false);

frame.setVisible(true);

}

}

public static void main (String[] args) {

JFrame frame=new JFrame("背景图设置");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

ImageIcon img = new ImageIcon("bg\\1.gif");//这是背景图片

JLabel imgLabel = new JLabel(img);//将背景图放在标签里。

frame.getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE));//注意这里是关键,将背景标签添加到jfram的LayeredPane面板里。

imgLabel.setBounds(0,0,img.getIconWidth(), img.getIconHeight());//设置背景标签的位置

Container cp=frame.getContentPane();

cp.setLayout(new BorderLayout());

JButton but=new JButton("anniu");//创建按钮

cp.add(but,"North");//将按钮添加入窗口的内容面板

((JPanel)cp).setOpaque(false); //注意这里,将内容面板设为透明。这样LayeredPane面板中的背景才能显示出来。

frame.setSize(500,300);   frame.setVisible(true);

}

通过为jframe设置背景图片,让我明白了以下的知识要点:

(1)jframe窗口的组成部分,最底层是jrootpane面板。(这一点恐怕很多初学者都没有注意吧!)

(2)jframe的组成如下:  jrootpane中包含glasspane和layeredpane两个面板。而layeredpane面板包含contentpane和jmenubar。(没想到吧contentpane是放在contentpane中的?)

(3)在jframe上添加组件,往往是添加在contentpane中。。但是在contentpane的下面还有两层面板,那就是layeredpane和jrootpane。

(4)任何一本关于java的书中都会介绍contentpane,却很少提到layeredpane和jrootpane,因此使得很多的初学者产生:jframe中只要一个contentpane的错误认识。 通过解决背景设置的问题,让我对jframe中容器的“层”结构,

更多参考:

从网上搜索了有关设置背景图片的文章,但是因为我每次设计窗口程序的时候,喜欢利用“Degsin”按钮,将所有的窗口进行布局后,在进行相关源代码的填写,因此,网页提供的答案是直接在主函数中编写,而我选择了在构造函数中编写,故有一定的不同。相关代码如下:

主函数:

public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() {

public void run() {

try {

HAPPY frame = new HAPPY();

//frame.setVisible(true);      这行代码,可加可不加,并不会影响最终结果,但是在构造函数中一定要添加;

} catch (Exception e) {

e.printStackTrace();

}

}

});

}

构造函数(关键代码):

JFrame frame=new JFrame("\设\置\背\景\图\片 ");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

ImageIcon img = new ImageIcon("src/images/1.jpg");//这是背景图片

JLabel imgLabel = new JLabel(img);//将背景图放在标签里。

frame.getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE));//注意这里是关键,将背景标签添加到jfram的     LayeredPane面板里。

imgLabel.setBounds(0,0,img.getIconWidth(), img.getIconHeight());//设置背景标签的位置

Container cp=frame.getContentPane();

cp.setLayout(null);      //这里选择绝对布局管理器,对于边界布局管理器,放入控件后,无法显示背景图片;因为将整个面板都填充满了;

((JPanel)cp).setOpaque(false); //这样就能显示出背景图片出来了。

剩下的就是在面板中添加相关的控件,添加语句可以用:

(1)frame.getContentPane().add(panel);        (2)cp.add(panel)

效果一样;

另一种方法则是直接为面板设置背景图片,源代码如下:

contentPane = new JPanel(){

private static final long serialVersionUID=-1588458291133087637L;

public void paint(Graphics g){

ImageIcon icon=new ImageIcon("src/images/5.jpg");

Image image=icon.getImage();

g.drawImage(image, 0, 0, null);

}

};

但在实验中发现,显示效果不如前一种方法,不知为何,面板上设置的标签文字显示不出来,所以,后一种方法虽然更简便,但似乎前一种方法效果更好!

第三种方法:

contentPane.setOpaque(false);

JLabel backgroundLabel = new JLabel("");

ImageIcon background = new ImageIcon(BalloonMove.class.getResource("/images/background.jpg"));

backgroundLabel.setBounds(0, 0, background.getIconWidth(),background.getIconHeight());

backgroundLabel.setIcon(background);

getLayeredPane().add(backgroundLabel, new Integer(Integer.MIN_VALUE));

窗口中的标签,可以直接添加到contentPane面板中,很显然,最后一种方法显示效果很好,且代码简便。

java jframe 设置背景图片_为jframe窗口设置背景图片相关推荐

  1. java设置窗体不透明的函数_透明窗口(窗口上面文字图片等内容不透明)的实现(使用SetLayeredWindowAttributes API函数)...

    透明窗口(窗口上面文字图片等内容不透明)的实现 本文讨论通过SetLayeredWindowAttributes来实现本文的目的. SetLayeredWindowAttributes的实现必须将窗口 ...

  2. python窗口设置背景图片_PyQt5 实现给窗口设置背景图片的方法

    PyQt5 实现给窗口设置背景图片的方法 QPalette类可以十分简单的达到设置窗口背景图片的目的 def use_palette(self): self.setWindowTitle(" ...

  3. java版的中世纪战争_世界战争英雄设置-火焰纹章英雄英雄地图及AI命令设置

    英雄地图及AI命令设置 游戏中练级塔中的AI设置和故事地图中的一样,所以如果故事地图中的AI是主动出击的,那练级塔一样的地图也是主动出击.故事地图中配置有5个敌人,在练级塔中也一样会配置5个敌人. 不 ...

  4. java 图片动画_java在窗口中添加图片做动画,怎么一闪一闪的?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 视频来自:优酷 在java中添加图片做动画效果,怎么一闪一闪的运动啊?怎样才能让它不闪的连续运动呢? 下面是代码,代码项目project里有两个类,一个是 ...

  5. node 压缩图片_推荐10个常用的图片处理小帮手(下)「值得收藏」

    作者: semlinker 转发链接:https://mp.weixin.qq.com/s/i3ynTtPJOECoAYfqHFoo3Q 前言 本文给小伙伴们隆重介绍用于图片处理的十个 「" ...

  6. 背景虚化_太赞了!背景虚化效果原来是这样实现的啊

    "背景虚化" "背景虚化" "背景虚化" 多少人为之倾慕的"背景虚化"效果,真的很难拍出来吗? 在洪辰的文章评论区里, ...

  7. 怎么打包图片_超简单的免费批量图片压缩技巧,只需3步

    我们在上传图片的时候,经常会遇到一个问题,那就是图片文件太大,无法上传.那这个时候我们该怎么办呢?我们一般都会想到把图片进行压缩之后,重新上传.那么我们要怎么压缩图片呢?如果图片数量很多,能不能进行批 ...

  8. cefsharp 网页另存为图片_如何将PDF转换为JPG图片?这些转换方法一学就会

    记得上学的时候,有次老师让我处理一些PDF格式文件,那时候还不熟悉这种文件,让我将这些PDF文件全部转换成图片,真的是一头雾水,费了好大的劲才将这些PDF文件转换完成.后来再遇到PDF文件我就知道怎么 ...

  9. 设置过期时间_在Redis中设置了过期时间的Key,需要注意哪些问题?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:千山qianshan juejin.im/post/5d6b ...

  10. node 压缩图片_手搓一个TinyPng压缩图片的WebpackPlugin

    作者: JowayYoung 转发链接:https://mp.weixin.qq.com/s/eqsZwZPCX-GZyB-EOm3TwQ 前言 曾经发表过一篇性能优化的文章<「实践」细聊前端性 ...

最新文章

  1. matplotlib多个饼状图
  2. Yongkil Kwon:EOS具有当今世界上最多中心化的协议 | 独家专访
  3. 向大家推荐一个.Net游戏引擎:Artificial Engines
  4. origin怎么打开txt文本_【每日一学】差示扫描量热法(DSC)测量材料的比热容(3在Origin软件中计算间接法测得比热容的方法)...
  5. LeetCode 1554. 只有一个不同字符的字符串(枚举)
  6. 快速实现一个室内空气质量检测仪
  7. 行,Python玩大了!​取代Excel,程序员:太牛!你怎么看?
  8. 数据结构之基于Java的顺序列表实现
  9. 非双一流普通院校毕业,你凭什么斩获 BAT 的 Offer?
  10. OpenCV探索之路(零):HighGUI——使用imwrite调整保存的图片质量
  11. seaborn_Seaborn Distplot:综合指南
  12. 并行语言开发平台 Erlang
  13. day01_启动程序装载器 IPL
  14. 第一次申请赴美商务签经历
  15. 山地车中轴进水表现_山地车中轴异响分析及解决方法
  16. BEC higher经验1
  17. 3D建模:14个建模小技巧
  18. 大气化学实验卫星 ACE-FTS(SCISAT) 相关介绍
  19. 华为任正非:​不为假动作付酬
  20. 为远程群晖NAS的自定义域名配置SSL证书

热门文章

  1. 服务器硬件配置应如何选择?
  2. java释放string_java – 释放stringbuilder内存的最快方法
  3. 计算机主机usb端口使用不了,电脑usb接口不能用怎么办
  4. 技嘉B550M-AORUS-ELITE主板RAID故障与解决方案
  5. 计算机网络实验一(常见服务和静态IP设置)
  6. tds for mysql_tds数据库是什么-和tds数据库相关的问题-阿里云开发者社区
  7. rstudio查询命令_Rstudio 常用命令
  8. python online json editor_python+django常用富文本插件使用配置(ckeditor,kindeditor)
  9. intel android 平板,IT百科之英特尔芯平板
  10. jQuery——淘宝购物车结算页面demo