文章目录
- Swing
- Swing组件的特性
- 分类
- 步骤
- Swing容器
- JFrame框架
- JPanel面板
- JDialog对话框
- JMenu菜单组件
- 创建菜单步骤
- 二级菜单
- 常用Swing组件
- 流式布局管理器(FlowLayout)
- 边界布局管理器(BorderLayout)
- 卡片布局管理器(CardLayout)
- 网格布局管理器(GridLayout)
- 网格包布局管理器(GridBagLayout)
GUI概述
GUI 即图形用户界面,使用图形方式,借助于窗口中的菜单、按钮等界面元素和鼠标操作,帮助用户方便地向计算机系统发布指令、启动操作,并将系统运行的结果同样以图形方式显示给用户。
GUI就是用户与计算机之间交互的图形化操作界面,又称为图形用户接口,通过GUI允许用户与Java应用程序或小程序进行交互操作。
Java语言提供两个处理图形用户界面的类库:
Java.awt包和Javax.swing包。
awt
Java.awt包提供了基本的Java程序的GUI设计工具。
主要包括三个设计工具:
组件(Component)
容器(Container)
布局管理器(Layout Manager)
组件
组件(Component)是Java的图形用户界面的最基本组成部分,组件是一个可以以图形化的方式显示在屏幕上并能与用户进行交互的对象。
组件不能独立地显示出来,必须将组件放在一定的容器中才可以显示出来。
java.awt.Component是许多组件类的父类,Component类中封装了组件通用的方法和属性,如图形的组件对象、大小、显示位置、前景色和背景色、边界、可见性。
容器
容器(Container)也是一个类,实际上是Component的子类,因此容器本身也是一个组件,具有组件的所有特质,但是它的主要功能是容纳其他组件和容器。
每个容器都有一个布局管理器(Layout Manager),当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其对应的布置管理器。
步骤
使用AWT开发GUI程序的五个步骤
(1)引入AWT包
(2)选择一个合适的容器(Container)
(3)确定一种布局管理器(Layout Manager)
(4)添加各种组件(Component)
(5)进行事件处理(Event Handling)
Swing
Swing是在AWT基础上扩展,它提供了许多新的图形界面组件。
Swing组件以“J”开头,除了拥有与AWT类似的按钮(JButton)、标签(JLabel)、复选框(JCheckBox)、菜单(JMenu)等基本组件外,还添加了一个丰富的高层组件集合,如表格(JTable)、树(JTree)等。
Swing组件的特性
(1)MVC(Model-View-Controller)体系结构:各组件都有一个对应的model类来专门管理数据,视图(view)和控件(controller)两部分合二为一,因此,各组件都有一个相互关联的分离模型(model)和它使用的界面(视图view和控件controller)。
(2)存取性支持:对组件操作的有关数据信息可予存取。
(3)键盘操作支持:可使用键盘代替鼠标操作组件。
(4)可设置边框:可为组件设置一或多个边框。
(5)可使用图标(Icon):除文字外,还可使用图标来修饰自己。
分类
(1)顶层容器:
JFrame,JApplet,JDialog,JWindow共4个。
(2)中间容器:
JPanel,JScrollPane,JSplitPane,JToolBar等。
(3)特殊容器:在GUI上起特殊作用的中间层,如JInternalFrame,JLayeredPane,JRootPane等。
(4)基本控件:实现人机交互的组件,如Jbutton,JComboBox,JList,JMenu,JSlider,JtextField等。
(5)不可编辑信息的显示控件:如JLabel,ToolTip,JProgressBar。
(6)可编辑信息的显示控件:如JColorChooser,JFileChooser,Jtable,JtextArea。
步骤
使用Swing开发GUI程序需要七个步骤
(1)引入Swing包
(2)选择外观和感觉(Look and Fell)
(3)设置顶层容器
(4)往其中添加内容面板
(5)向内容面板中添加各种组件(Component)
(6)设置各种组件
(7)进行事件处理(Event Handling)
Swing容器
容器java.awt.Container是Component的子类,一个容器可以容纳多个组件,并使它们成为一个整体。
Swing容器分为两类:
顶层容器:一般可独立存在,包括JWindow、JFrame、JDialog和JApplet。
非顶层容器(容器面板):不是独立的窗口,它们必须嵌套在顶层容器内部使用,非顶层容器包括JPanel及JScrollPane等
JFrame框架
JFrame组件是一个顶层容器,描述的是一种带标题框并可以改变大小的窗口。
JFrame组件的对象为一个JFrame窗口,默认情况下表现出一种不可视且最小化状态。
设计窗口时,一般需要通过setSize()或setBounds()方法设定窗口大小,并调用setVisible()将窗口设置为可视状态,否则,运行时将无法看见窗口。
JPanel面板
JPanel组件的对象为一块面板,面板是一种没有标题的中间容器。默认情况下表现出一种透明状态。
这类容器不能独立存在,必须通过add()方法添加到一个顶层容器或存在于顶层容器的一个中间容器中。面板常用于图形界面的修饰。
JDialog对话框
JDialog组件描述的是对话窗口,但它比JFrame简单,没有最小化按钮、状态等控制元素。
JDialog组件主要用来显示提示信息或接收用户输入。
对话框一般都内置一个顶层窗口,如JFrame窗口。
对话框根据显示模式分为有模式和无模式两种
JMenu菜单组件
一个菜单组件通常由三种菜单对象组成:
菜单条JMenuBar、JMenu菜单、JMenuItem菜单项
每个菜单条包含若干个菜单,而每个菜单中还可包含若干个菜单项。
整个菜单就是一组层次化组织、管理的命令集合,使用它用户可方便地向程序发布命令。
创建菜单步骤
(1)首先要有一个框架JFrame
(2)在框架中放置一个菜单条对象JMenuBar
(3)再在菜单条上创建若干个菜单对象JMenu
(4)接着在每个菜单对象JMenu上创建若干个菜单项对象JMenuItem
(5)然后用add()方法把JMenu对象添加到JMenuBar对象中
(6)再把JMenuItem或JCheckBoxMenuItem(带复选框的菜单项)对象添加到JMenu对象中
二级菜单
(1)创建一个包含若干菜单项(MenuItem)的菜单(Menu)
(2)把菜单像普通菜单项一样加入到某个一级菜单项中即可。
常用Swing组件
(1)按钮(JButton)
(2)复选框(JCheckBox)
(3)单选框(JRadioButton)
(4)选择框(JComboBox)
(5)文件选择器(JFileChooser)
(6)标签(JLabel)
(7)列表(List)
(8)菜单(JMenu)
(9)进程条(JProgressBar)
(10)滑动条(JSlider)
(11)表格(JTable)
(12)树(JTree)
GUI布局管理器
一个容器中的各个组件中间的位置和大小关系称之为布局
可通过容器的setLayout()和getLayout()方法来确定布局,也就是限制容器中各个组件的位置和大小等。
java提供了5种布局管理器:
流式布局管理器(FlowLayout)
边界布局管理器(BorderLayout)
卡片布局管理器(CardLayout)
网格布局管理器(GridLayout)
网格包布局管理器(GridBagLayout)
流式布局管理器(FlowLayout)
流式布局管理器(FlowLayout)是最基本的一种布局
流式布局指的是把图形组件以preferredSize一个接一个地显示在面板上,如果一行显示不了所有组件,会自动换到下一行显示。
流式布局管理器(FlowLayout)是Panel、JPanel、JApplet默认的布局管理方式。
边界布局管理器(BorderLayout)
边界布局管理器(BorderLayout)包括5个区:北区、南区、东区、西区、中区、这5个区在面板上的分布规律是上北下南左西右东
边界布局管理器(BorderLayout)是容器JFrame和JDialog默认使用的布局管理器
卡片布局管理器(CardLayout)
卡片布局管理器(CardLayout)把每个组件看作一张卡片,好像一副扑克牌,它们叠在一起,每次只有最外面的一个组件可被看到,这个被显示的组件将占据所有的容器空间。
在使用add()方法往窗口容器中加入组件时应对每个组件赋予一个名字
然后依据这个名字利用CardLayout类所提供的方法来控制其它组件是否显示
网格布局管理器(GridLayout)
网格布局管理器(GridLayout)将容器划分成为若干行列的网格,在容器上添加组件时它们按从左到右,从上到下的顺序在网格中排列
在网格布局管理器(GridLayout)的构造方法中,需要指定在容器上划分的网格的行、列数
利用GridLayout布局策略时,容器各组件的宽度相同,同样,所有组件的高度也是相同的。当容器的尺寸发生变化时,各组件的相对位置不变,但各自的尺寸会发生变化。
网格包布局管理器(GridBagLayout)
网格包布局管理器(GridBagLayout)是java中最有弹性但也是最复杂的一种布局管理器
它只有一种构造函数,但必须配合GridBagConstraints才能达到设置的效果。和基本的网格布局不同的是,一个组件可以跨越一个或多个网格,这样一来增加了布局的灵活性。