#笔记#圣思园 JavaSE 第76讲——GUI,AWT组件,布局管理器
2015-06-17 10:50
344 查看
1.GUI——Graphical User Interface——图形用户界面
根据作用分类,GUI组件可分为 基本组件 和 容器组件:又称构件,如按钮、文本框等
容器:特殊的组件,可以容纳其他组件,如窗口、对话框等。
所有容器类都是java.awt.Container的直接或间接子类
2.AWT——Abstract Window Toolkit——抽象窗口工具集。
是第一代java GUI组件,是重量级的(GUI元素基于底层的操作系统,所以不同操作系统绘制出的效果不同)
Swing——不依赖于底层细节,轻量级组件。
AWT提供基本的GUI组件,确保显示在屏幕上的每个GUI组件都是抽象类组件的子类Container是Component(组件类)的子类,Container包括两个主要子类:Panel(面板)和window(窗口)
基本的AWT库处理用户界面元素的方法:把这些元素的创建和行为委托给每个目标平台上(Windows,Unix,Mac等)的本地GUI工具进行处理
Window是Java.awt.Window的对象,是显示屏上独立的本机窗口,独立于其他容器
Window有两种形式:Frame和Dialog。它们是Window的子类。
Frame是一个带有标题和缩放角的窗口
Dialog没有菜单条,能移动,不能缩放
Panel是Java.awt.Panel的对象,Panel包含在另一个容器中,或是在Web浏览器的窗口中。
Panel确定一个四边形,其他组件可以放入其中。Panel必须放在Window或Window的子类中,以便显示
3.Frames
是Window的子类,有标题和缩放角。从容器继承,并以add方式添加组件
能以字符串规定的标题来创建不可见框架对象
能将BorderLayout当做缺省布局管理器
用setLayout方式来改变缺省布局管理器
Frame类继承层次
java.lang.Object
java.awt.Component
java.awt.Container
java.awt.Window
java.awt.Frame
示例程序:MyFrame.java
.在框架显示在屏幕上之前,必须做成可见的(调用setVisible(true)),而且大小是确定的(调用setSize()或pack())
4.Panels
为组件提供空间,允许子面板拥有自己的布局管理器以add方法添加组件。用Container类中的add()方法可以做到使面板对象可见,把面板对象添加到窗口或框架对象上
Panel类继承层次
java.lang.Object
java.awt.Component
java.awt.Container
java.awt.panel
示例程序:FrameWithPanel.java
5.布局管理器
容器里组件的位置和大小,由布局管理器决定。负责决定布局方针以及其容器的每一个子组件的大小容器对布局管理器的特定实例保持一个引用,当容器需要定位一个组件时,它将调用布局管理器来完成。当决定一个组件大小时,也如此
AWT提供了五种布局管理器:
1.BorderLayout
2.FlowLayout
3.GridLayout
4.CardLayout
5.GridBagLayout
每个Container(如Frame或Panel)都有一个与它相关的缺省布局管理器,它可以通过调用setLayout()来改变
通过设置布局管理器,控制组件的大小和位置,调用setLayout(null)
设置null的布局管理器后,必须对所有的组件调用setLocation(),setSize()或色堂Bounds(),将它们定位在容器中
继承Window的Frame和Dialog使用的布局管理器是BorderLayout
继承Panel的Applet使用的布局管理器是FlowLayout
示例程序:ExGui.java
运行结果:
如果注释掉frame.setLayout(new FlowLayout()),此时Frame使用自己的BoderLayout作为布局管理器。运行结果如下:
第一个按钮消失了——被第二个按钮覆盖了
FlowLayout——“流”式的布局管理器
BoderLayout——东西南北中的方式布局。窗口缩放时,按钮相应位置不变,但大小改变。每个区域只能加入一个组件
示例程序:ExGui2.java
运行结果:
示例程序:MyFlow.java
运行结果:
6.Grid布局管理器
示例程序:GridEx.java运行结果:
7.综合使用布局管理器示例程序:ExGui3.java
运行结果:
相关文章推荐
- 【uiautomator】UiScollable
- 文件的分割与合并SequenceInputStream
- easyui Datagrid的deleteRow多行移除问题
- 键盘挡住UITextField问题和TPKeyboardAvoiding
- pcduino指纹门禁开发–篇二
- Lucene学习总结之八:Lucene的查询语法,JavaCC及QueryParser
- java Map 按value排序
- 【Lucene4.8教程之六】QueryParser与Query子类:如何生成Query对象
- 获取唯一标识符(UDID/UUID)
- pcduino指纹门禁开发–篇一
- String, StringBuilder 与StringBuffer的区别与联系
- 关于serialVersionUID的说明
- mosquitto使用心得
- UI
- 分享经验,UI菜鸟是怎样成为大牛的
- quick中的静态布局和动态展示
- IdeasToComeTrue
- ANDROID L - Material Design详解(UI控件)
- 极客学院Carol老师的UICollectionView实现瀑布流
- UIButtonTypeSystem backBarButtonItem