swing的版面结构

来源:互联网 发布:博易大师顾比均线源码 编辑:程序博客网 时间:2024/04/29 02:51

Swing常用的package
PACHAGE | 内 容
-----------------|----------------
javax.swing | 最常用的pachage,包含了各种swing组件的类
javax.swing.border | 包含与swing组件外框有关的类
javax..swing.colorchooser | 针对swing调色盘组件(JColorChooser)设计的类
javax.swing.event | 处理由swing组件产生的事件,有别于AWT事件
javax.swing.filechooser | 为swing文件选择对话框(JFileChooser)设计的类
---------------------------------
javax.swing.plaf | 处理swing组件外观的相关类
javax.swing.plaf.basic | 
javax.swing.plaf.metal | 
javax.swing.plaf.multi | 
-------------------------------- 
javax.swing.table | 针对swing表格组件(JTable)所设计的类
------------------------------
javax.swing.text | 包含与swing文字组件相关的类
javax.swing.text.html |
javax.swing.text.html.parser |
javax.swing.text.rtf |
--------------------------------
javax.swing.tree | 针对swing树关元件(JTree)所设计的类
javax.swing.undo | 提供swing文字组件Redo或Undo的功能

1-2:swing的版面结构
Swing中几乎所有组件都是从JComponent衍生而来,也就是说这些组件都是lightweight Component,均由纯java code所编写面成、Swing中以下几个组件不是由Component继承面来:
JFrame(JRoot Pane)
JDialog(JRoot Pane)
JWindow(JRoot Pane)
JApplet(JRoot Pane)
以上四个组件是heavyweight Component,必须使用到native code来画出这四个窗口组件,因为要在操作系统中显示窗口画面,必须使用操作系统的窗口资源,而以往的AWT组件大多使用native code所构造出来,因此Swing中的JFrame便继承原有AWT中的Frame类,面不是继承JComponent类。同样,JApplet是继承原有AWT中的JApplet类,也不是继承JComponent类。

JFrame、JDialog、JWindow及JApplet这四个组件统称为最上层组件,因为其余的swing组件都必须依附在此四组件之一上才能显示出来。此四组件均实现(Implement)RootPaneContainer这个界面(Interface),此界面定义了各种容器取得与设置并不是真实的容器,它是由Glass Pane与Layered Pane所组成(Layered Pane里拥有Content Pane与Menu Bar,而Menu Bar可选择使用或不使用),我们不能在JRootPane上加入任何的组件,因为它只是一个虚拟的容器,若要在最上层组件上加入组件,必须加在 Layered Pane或是Layered Pane里的Content Pane上。以JFrame为例,一般我们要在JFrame上加入其他组件(如JButton、JLabel等)必须先取得JFrame的Content Pane,然后将要加入的组件放在此Content Pane中,而不是直接就加到JFrame上。因此若要在JFrame中加入一个按钮,不能像以前AWT时一样写成frame.add(button)的形式,而必须先取得JFrame的Content Pane,然后将按钮加入Content Pane中,如:
frame.getContentPane().add(button)
否则在编译的时候将有错误信息产生。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
注意:
1.组件必须加在容器中,而容器本身具有层次性的关系,就如同珠宝盒一般,大盒子里面可以放小盒子,小盒子里面还可以放更小的盒子,而珠宝就可以放在某一个盒子中,这里的珠宝就代表组件,盒子就代表容器。因此若您想在JFrame加入任何组件时,必须先取得JFrame的容器来放置这些组件,而由于 JFrame、JDialog、JWindow与JApplet是显示Swing组件的源头,我们可以称它们为根组件,也就是所谓的最上层组件。

2.RootPaneContainer它是一个interface,共有5个类实现(Implement)它,分别是JFrame、JAppleet、JWindow、JDialog、
JInternalFrame, 其中JInternalFrame是一个lightweight Component,它不是一个最上层组件,也就是说JInternalFrame不能单独显示出来,必须依附在最上层组件中,我们将在下面讨论组件,而 JFrame,JApplet,JWindow,JDialog均为最上层组件。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
RootPaneContainer定义了下面几种方法:
方法
Container getContentPane()返回contentPane
Component getGlassPane()返回glassPane
JLayeredPane getLayeredPane()返回layeredPane
JRootPane getRootPane返回属于这个组件的JRootPane
Void setContentPane(Container contentpane)设置ContentPane
Void setGlassPane(Component glassPane)设置GlassPane
Void setLayeredPane(JLayeredPane layeredPane)设置LayeredPane
JFrame如何取得Content Pane的实际流程,下面是一段很简单的程序代码:
public class Simple{
Simple(){
JFrame frame=new JFrame();
Container contentPane=frame.getContentPane();
JButton button=new JButton();
contentPane.add(button);
}
}
当我们写frame.getContentPane()时,会返回此frame的Content Pane,也就是一个容器组件,有了容器之后我们才能将button组件摆进去,此时JFrame才算拥有button组件。所以JFrame就好像是一块空地,要在这空地上信人应该先盖一栋房子(容器),然后人、家具、设备等等(组件)就能搬进此房子中。下面的层次结构说明了最上层组件都含有 JRootPane组件,JRootPane本身就含有容器组件,可让最上层组件装入其他的组件。

|Frame------JFrame(JRoot Pane)
|
Window|Dialog-----JDialog(JRoot Pane)
|
|
|-----------JWindow(JRoot Pane)

Applet -----------JApplet(JRoot Pane)

图示:
|Grass Pane
|
Root Pane|
| |Content Pane
|Layered Pane|
|Menu Bar

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 脸两边的骨头大怎么办 做b超胎儿老盘腿怎么办 裤子白边染色了怎么办 异地恋要分手了怎么办 异地恋没话题了怎么办 陪婆婆聊天心情超级郁闷怎么办? 他不想理你了怎么办 陌陌看到信息不回怎么办 qq的文档看不了怎么办 怀孕了分手了怎么办啊 qq节日祝福关了怎么办 微信欠款不还怎么办 qq文件记录删除了怎么办 qq漫游记录删了怎么办 换了新手机微信怎么办 新手机了微信怎么办 微信收藏空间已满怎么办 微信收藏空间满了怎么办 qq步数上传不了怎么办 qq发送的文件失效了怎么办 苹果手机微信数据损坏怎么办 微信文件被清理怎么办 老婆与别人聊暧昧话题怎么办 微信不小心删了聊天记录怎么办 当聊天没话题了怎么办 老婆和别人频繁聊天老公怎么办 qq上把人屏蔽了怎么办 注册微信验证码发不出去怎么办 两个人在一起没有话题怎么办 两个人聊天没话题怎么办 qq邮箱限制信用卡账单怎么办 和朋友聊天没话题怎么办 跟朋友聊天没话题怎么办 和朋友聊天找不到话题怎么办 qq加好友忽略了怎么办 微信加好友收不到验证消息怎么办 陌陌距离乱了怎么办 qq不能点赞了怎么办 快递发货地址写错了怎么办 订的海鲜不发货怎么办 拉人进群频繁了怎么办