关于Swing中JFrame等顶级容器的层次还有设置背景的方式
资料来自:http://blog.csdn.net/qq_32006373/article/details/49659129
http://yuncode.net/code/c_5196327caac3917
在做一个Java大作业,做了一个登录界面后觉得太单调,于是想说加个背景。先是直接弄了个ImageIcon,然后改成Image,再直接用网上的一个重写paint()的方法来设置背景,成功了,但是却发现component都被覆盖掉了。于是开始百度有关JFrame等容器的层次问题。
从视觉效果上看,JFrame的结构是这样的:
可以看出,
Frame 的最底层是 RootPane,
然后是 LayeredPane
再上面就是 ContentPane
最顶层是 GlassPane
最顶层的 GlassPane 默认是透明的,而这个ContentPane,就是我们平时用来添加控件的方法,现在来说说这个ContentPane
ContentPane默认是不透明的,完整的添加控件的方法是:
frame.getContentPane.add(...);
现在简写成frame.add(...);
也可以说contentPane就是个放在 LayeredPane 上的一个JPanel。
所以让我们从模型的角度来看看JFrame的层次:
现在来讲讲如何搞个背景:
JFrame中的层次分布及相对关系是:
最底层是:JRootPane;
ContentPane透明,这样就实现了背景的设置。
JPanel jpanelOfFrame=(JPanel)this.getContentPane();//拿到ContentPane,JPanel有设置透明的方法 //设置背景图片的部分
String imageUrl = "src/image/f0f600978623446f8ae2d189d3ac0fdf.jpg";//背景图路径
ImageIcon icon = new ImageIcon(imageUrl);
JLabel labelBackground = new JLabel(icon); labelBackground.setBounds(0, 0, icon.getIconWidth(), icon.getIconHeight());//设置这个label使得图片刚好充满标签
this.getLayeredPane().add(labelBackground,new Integer(Integer.MIN_VALUE));//this就是JFrame
jpanelOfFrame.setOpaque(false);//设置contentpane为透明
关于Swing中JFrame等顶级容器的层次还有设置背景的方式的更多相关文章
- 第13章 Swing程序设计----JFrame窗体
JFrame窗体是一个容器,它是Swing程序中各个组件的载体,可以将JFrame看作是承载这些Swing组件的容器. 在开发应用程序时可以通过继承java.swing.JFrame类创建一个窗体,在 ...
- 转:swing 中paint与paintComponent的区别(jcomponent)
http://blog.csdn.net/q597756870/article/details/17854247 查API文档,查得在类Jcomponent下的paint方法有以下解释: ...
- swing中的分层
swing中的分层 摘自:https://blog.csdn.net/levelmini/article/details/26692205 2014年05月23日 12:42:56 阅读数:1244 ...
- Java自学-图形界面 Swing中的线程
Swing中的线程 步骤 1 : 三种线程 在Swing程序的开发中,需要建立3种线程的概念 初始化线程 初始化线程用于创建各种容器,组件并显示他们,一旦创建并显示,初始化线程的任务就结束了. 事件调 ...
- Swing杂记——Swing中引入Android的NinePatch技术,让Swing拥有Android的外观定制能力
[摘要] 本文诣在展示如何在Swing中引入 NinePatch技术(早期有文章里中文译作九格图,暂且这么叫吧^_^,但此术非传统移动手机上的功能布局——九格图哦). [准备篇] Q:何为 NineP ...
- 【Swing】理解Swing中的事件与线程
talk is cheap , show me the code. Swing中的事件 事件驱动 所有的GUI程序都是事件驱动的.Swing当然也是. GUI程序不同于Command Line程序,一 ...
- 详解Swing中JTree组件的功能
JTree组件是另外一个复杂组件,它不像 JTable 那样难用,但是也不像 JList 那么容易.使用 JTree 时麻烦的部分是它要求的数据模型. JTree组件的功能来自树的概念,树有分支和叶子 ...
- 【代码总结● Swing中的一些操作与设置】
Swing中设置关闭窗口验证与添加背景图片 package com.swing.test; import java.awt.EventQueue; import java.awt.Image; imp ...
- JFrame包含的容器(JRootPane)
JFrame对象创建后,此对象包含JRootPane类型的容器.JRootPane 下有GlassPane, 和 LayeredPane,LayeredPane下又有ContentPane , ...
随机推荐
- 配置activeMQ
一.加入以下的库 并配置好路径 ws2_32.lib;Mswsock.lib;cppunit.lib;libapr-1.lib;libapriconv-1.lib;libaprutil-1.lib;l ...
- 分享codeigniter框架,在zend studio 环境下的代码提示
一.到github下载相关文件 https://github.com/Stunt/Codeigniter-autocomplete 二.把文件放到application/config中 代码提示就出来 ...
- iOS开发-UITableView单选多选/复选实现1
TableView怎样实现单选或者多选呢? 我们的直接思路是改动某一个Cell的样式就可以, 那么改动样式须要通过改动相应的数据, 从这里能够判断我们须要给Cell相应的数据设置一个标志位, 当选中的 ...
- Echarts 的样例
jsp页面: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8 ...
- 广东IP段列表
广东IP段列表219.137.240.0 219.137.240.255219.137.148.0 219.137.150.255 广东省广州市 电信ADSL219.137.144.0 219.137 ...
- MongoDB 操作手冊CRUD 更新 update
改动记录 概述 MongoDB提供了update()方法用于更新记录. 这种方法接受下面參数: 一个更新条件的JSON对象用于匹配记录,一个更新操作JSON对象用于声明更新操作,和一个选项JS ...
- QC ALM 11创建域、项目和用户
一旦HP-ALM安装,我们仅仅能继续创建域.项目和用户使用后的ALM工作.以下是步骤来创建项目.域和用户. 一.创建域 1.对于创建域,第一步是进入站点管理员页面.开展QC使用URL - ...
- Django模板语言(二)
1,装饰器:在不改变原函数的调用方式情况下为原函数增加一些功能(遵循开放封闭的原则) def outter(fn): def inner(*args, **kwargs): # 可以在执行函数前执行一 ...
- [BZOJ2144]国家集训队 跳跳棋
题目描述 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子. 我们用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在a,b,c这三个位置.我们要通过最少的跳动把他们的位置移动 ...
- 自己写好的pdo数据库抽象层 mysql为例
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/qq1355541448/article/details/31787719 class pdo_dat ...