java心得--java GUI设计,
java心得--java GUI设计,
1. 用户界面的类型
µ 字符用户界面(CUI),例如MS-DOS
µ 图形用户界面(GUI,GraphicalUser Interface )是指以图形化方式与用户进行交互的程序运行界面,例如MicrosoftWindows、Word等。(优点:更友好、更丰富,且提供灵活、强大的人机交互功能,成为当前应用程序设计的主流 )
2. 组件(Component)是GUI的基本组成元素,凡是能够以图形化方式显示在屏幕上并能与用户交互的对象均为组件
3. 在JDK的java.awt包中定义了多种GUI组件类,流程图为:
Panel:面、平板(布局用,相当于js中的DIV);
label:标签; contains:容器;
applet :小应用程序; field:文件
组件分为:
基本的控制组件,例如:Button、Label等;
容器(Container):能容纳和排列组件的组件。
ü Container类描述了容器组件的所有性质;
ü 它继承于Component类,因此容器类对象本身也是一个组件,具有组件的所有性质,但反过来组件却不一定是容器;
ü 控制组件要想显示出来必须放置在容器组件中
4. Conpoment类的基本属性和操作方法
属性名 |
含义 |
设置属性的方法 |
获取属性的方法 |
background |
背景色 |
void setBackground(Color) |
Color getBackground() |
-- |
边界 |
void setBounds(Rectangle) |
Rectangle getBounds() |
-- |
-- |
Void setBounds(int,int,int,int) |
-- |
cursor |
光标 |
void setCursor(Cursor) |
Cursor getCursor() |
layoutMgr |
布局 |
setLayout(LayoutManager) |
LayoutManager getLayout() |
enabled |
使能 |
void setEnabled(boolean) |
boolean isEnabled() |
font |
字体 |
void setFont(Font) |
Font getFont () |
foreground |
前景色 |
void setForeground(Color) |
Color getForeground () |
-- |
位置 |
void setLocation(Point) |
Point getLocation() |
-- |
-- |
void setLocation(int,int) |
Point getLocationOnScreen() |
name |
组件名称 |
void setName(String) |
String getName() |
-- |
尺寸 |
void setSize(Dimension) |
Dimension getSize() |
visible |
可见性 |
void setVisible(boolean) |
boolean getVisible() |
5. 在AWT中存在两种主要的容器类型:
µ java.awt.Window
描述的是一个没有边框和菜单栏、可自由停靠的顶层容器(是指不允许将其包含于其他的容器中),一般不直接使用该类,而是使用其子类Frame。
µ java.awt.Panel
最简单而常用的容器,可作为容器包含其他组件,但不能独立存在,必须被添加到其它容器中。
6. Frame 默认的大小为刚好容纳下标题条和最小(大)化、关闭按钮, 最大(小)化按钮可起作用,关闭按钮不起作用,这不并是frame组件存在什么问题,而是为应用程序预留了接口,允许开发者加入关闭窗口时要执行的特定的处理逻辑,例如:退出程序前保存文件等,目前可在程序运行的控制台窗口点小红框或按ctrl+c终止当前运行的java GUI程序。
¯ Frame窗口默认是不可见的,可使用setVisible(true|false)方法使之可见或隐藏。
¯ 组件在容器中的摆放位置由布局管理器决定,Frame使用setLayout()方法可以设置窗口的布局。
¯ Frame.setLayout(null)的作用是:frame的默认布局理器被取消,人工设置了panel的尺寸大小和在容器中的位置;
¯ setSize()方法用于设置组件尺寸大小,即宽度和高度,单位为像素;
¯ setLocation()方法用于设置组件在容器中的位置,即组件的左上角,即组件的左上角顶点坐标,单位也是像素。
¯ 各个GUI容器都拥有自己的坐标系统(计算机的显示器屏幕也是一种GUI容器)
7. 容器对其中所包含组件的排列方式,包括组件的位置和大小的设定,被称为容器的布局(Layout)。
¯ 布局管理器:指系统事先定义好的若干容器布局效果,使用它们可以方便地实现组件在容器的布局管理,并能够满足各种常规需要。Java提供了五种布局,例如:FlowLayout、BorderLayout、GridLayout、GardLayout、GridBagLayout。
¯ 每一个容器都有默认的布局管理器,在创建一个容器对象时,同时也会创建一个相应的默认布局管理器对象,用户也可以随时为容器创建和设置新的布局管理器。
容器对象.setLayout(布局管理器对象) 比如:setLayout(new FlowLayout());就是创建一个FlowLayout类型的实例并将之关联到目标容器对象,或者说将其指派给Frame容器。
布局管理器 容器对象.getLayout()
8. 常用布局管理器
µ FlowLayout:流式布局,是Panel(及其子类)类型容器的默认布局管理器类型。
¯ 布局效果:组件在容器中按照加入次序逐行定位,行内从左到右,一行排满后换行。组件按原始大小进行显示。
¯ 构造方法
public FlowLayout():默认居中对齐,5个像素的水平和垂直间距
public FlowLayout(int align): 指定对齐方式5个像素的水平和垂直间距
public FlowLayout(int align,int hgap,int vgap): 组件的水平和垂直间距
¯ 对齐方式可以使用FlowLayout类中定义静态常量来设定,主要包括:
FlowLayout.LEFT 左对齐
FlowLayout.RIGHT 右对齐
FlowLayout.CENTER 居中对齐
µ BorderLayout:边界布局,是Window及其子类类型容器的默认布局管理器。
¯ 布局效果:将整个容器范围划分成East、West、South、North、Center五个区域,组件只能被添加到指定的区域。
¯ 在使用边界布局的容器中,组件的尺寸也被布局管理器强行控制,即与其所在区域的尺寸相同。
¯ 构造方法
public BorderLayout():包含的组件/区域间距为0
public BorderLayout(int hgap,int vgap) :水平间距为hgap,垂直间距为vgap
¯ 每个区域只能加入一个组件,如加入多个,则先前加入的组件会被遗弃
注意:
ü 当容器的尺寸发生变化时,其中各组件相对位置不变,尺寸随所在区域进行缩放调整;
ü 调整原则:北、南两个区域只能在水平方向缩放(宽度可调),东、西两个区域只能在垂直方向缩放(高度可调),中部区域都可缩放
一般来说,此布局方式用于GUI程序的主窗体是比较合适的:北部区域(即上面)可以添加菜单条或工具条之类的组件,南部区域(即下面)可以添加状态条,东部区域(即右面)可以添加滚动条,中部区域则作为主体编辑区,当整个容器发生尺寸重置时,各区域进行定向缩放调整的原则就可以很好的发挥作用了。
µ GridLayout:网格布局
布局效果:将容器区域划分成规则的矩形网格,每个单元格区域大小相等。组件被添加到每个单元格中,按组件加入顺序先从左到右填满一行后换行,行间从上到下
一个单元格区域放一个组件,因此组件大小被布局管理器强行控制,与单元格同等大小
ü 构造方法
public GridLayout() :组件位于一行中,各占一列
public GridLayout(int rows,int cols):通过参数指定布局的行数rows和列数cols。
public GridLayout(int rows,int cols,int hgap,int vgap):通过参数指定布局的行数rows和列数cols;以及组件间的水平间距hgap和垂直间距vgap。
ü Pack()方法是Window类中定义的,其功能是调整此窗口的大小,使之紧凑化以适合其中所包含组件的原始尺寸和布局。
ü 当GridLayout布局的容器尺寸发生变化时,每个单元格的大小都将随之作调整,组件的大小也会发生变化。
ü 正常情况下使用GridLayout布局时,向容器中加入的组件数目应与容器划分出来的单元格总数相等,但假如出现两者数目不等的情况,程序也不会出错,而是保证行数为设置值,列数则通过指定的行数和布局中的组件总数来进行调整。
µ CardLayout:卡片布局
布局效果:将多个组件在同一容器区域内交替显示,相当于多张卡片摞在一起,只有最上面的卡片是可见的。
一个组件就是一张卡片,每张卡片可以指定卡片名
CardLayout直接提供了组件的显示控制方法
ü 构造方法
public CardLayout()
public CardLayout(int hgap,int vgap)
ü 其他方法
public void first(Container parent)—显示第一张卡片
public void last(Container parent)—显示最后一张卡片
public void previous(Container parent)—显示前一张卡片,如果当前可见卡片是第一张,则翻转到最后一张
public void next(Container parent)—显示后一张卡片,如果当前可见卡片是最后一张,则翻转到第一张
public void show(Container parent,String name):翻转到已添加到此布局的具有指定名称的组件,如果不存在这样的组件,则不发生任何操作
µ GridBagLayout几乎能够实现任何的布局效果,但用起来非常繁琐,几乎没有人用。
GridBagLayout是建立在GridLayout基础上的一种极为复杂而灵活的布局方式,它不显示规定网格中的行数和列数。实际上这种布局管理器维持的是一个动态的矩形单元网格,它采用额外的布局约束工具(GridBagLayout类的实例)对加入的组件逐个进行单独的布局控制,不要求组件的大小相同就可以垂直和水平对齐,也就是说,每个组件可以占有一个或多个单元格,即允许组件的显示区域跨行和跨列。
相关文章
- 暂无相关文章
用户点评