9.1 JAVA SWING概述
通过图形用户界面(GUI),用户和程序之间可以进行交互。
Java.awt包提供了许多原来设计GUI的组件类。
容器类(container)和组件类(component):
javax.swing包中的Jcomponent类是java.awt包中Container的一个直接子类,是java.awt包中的Component类的一个间接子类。
java把Component类的子类或间接子类创建的对象成为一个组件。
java把Container的子类或间接子类创建的对象成为一个容器。
Container类提供public方法add(),调用方法将组件添加到容器中。
removeAll()方法可以移除容器中的全部组件。
remove(Component c)方法移除组件c。
容器嵌套:容器也是一个组件,一个容器可以添加到另一个容器当中。
validate()方法:当容器添加新的组件或者移除组件时,应当调用validate方法,以确保组件的正常显示。
9.2 窗口
一个基于GUI的应用程序应当提供一个能和操作系统直接交互的容器,该容器可以被直接显示、绘制在操作系统控制的平台上,如显示器,这样的容器被称为GUI设计的底层容器。Jframe类实例是一个底层容器,即窗口。当需要一个窗口时,可使用Jframe或子类创建一个对象,窗口也是一个容器,可以向窗口添加组件,不允许将窗口添加到其他容器中。
9.2.1 JFrame常用方法
Jframe()创建一个无标题窗口。
Jframe(String s)创建标题为s的窗口。
public void setBounds(int a,int b,int width,int height)设置窗口位置(a,b),左上边为原点,宽为width,高为height。
public void setVisible(boolean b)设置窗口是否可见,默认false。
public void setResizable(boolean b)设置窗口是否可以调整大小,默认为true。
public void dispose()撤销当前窗口,并释放当前窗口使用的资源。
9.2.2 菜单条、菜单、菜单项
Jcomponet的子类Jmenubar负责创建菜单条。
Jmenu负责创建菜单。
JmenuItem负责检创建菜单项。
Jmenu是JmenuItem的子类,因此菜单本身也是一个菜单项。
Icon声明一个图标,使用其子类ImageIcon类创建一个图标:Icon icon=new ImageIcon(“a.gif”),菜单项调用setIcon(Icon icon)方法将图标设置为icon
9.3常用组件与布局
9.3.1 常见组件
JTextField(文本框):允许用户在文本框输入单行文本
JTeextArea(文本区):允许用户在文本区中输入多行文本
JButton(按钮):允许用户单击按钮
JLabel(标签):标签为用户提供信息
JCheckBox(复选框):为用户提供多种选择
JRadioButton(单选按钮):为用户提供单项选择。
JPasswordField(密码框):用户输入密码时,默认回显为“*”.
9.3.2 常用容器(本节提到的是中间容器)
JPanel面板:JPanel创建一个面板,默认布局:FlowLayout
JTabbedPane选项卡窗格:向容器添加一个组件时,容器会自动为该组件指定一个选项卡。个选项卡组件层叠式放入容器,单击选项卡时,显示相应的组件。
JScrollPane滚动窗格:滚动窗格可以添加一个组件,JTextArea不自带滚动条,因此就需要把文本区放到一个滚动窗格,如:JScrollPane scroll=new JScrollPane(new JTextArea());
JSplitPane拆分窗格:被分成两部分的容器,每部分有一个组件。
JLayeredPane分层窗格:如果添加容器中的组件经常需要待处理叠加问题,可以考虑将组件添加到分层窗格。
9.3.3 常用布局
FlowLayout布局:由左向右依次排序组件,排满装行,可以改变对齐方式。
BorderLayout布局:容器分为上、下、左、右、中五个区域。
CardLayout布局:组件测得放入容器。
GridLayout布局:将容器划分为等大小的网格区域。组件就位于网格中。
null布局:空布局,组件可以准确定位在容器的某个位置中
BoxLayout布局:当需要容器嵌套时,使用BoxLayout布局。
9.4处理事件
处理事件包括事件源、监视器、处理事件的接口3个概念。
事件源:能够产生事件的对象都可以称为事件源。
监视器:需要一个对象对事件源进行监视,以便对发生的事件作出处理。
处理事件的接口:当事件源发生事件时,监视器就会自动调用被类重写的接口方法。
ActionEvent事件:文本框、按钮、菜单项、密码框和单选框按钮都可以触发ActionEvent事件,即可以称为ActionEvent事件的事件源。
ItemEvent事件:选择框、下拉列表都可以触发ItemEvent事件。
DocumentEvent事件:用户在文本区中进行文本编辑操作,使得文本区的文本内容发生变化,将导致文本区所维护的文档模式中的数据发生变化,从而导致文本区所维护的文档触发DocumentEvent事件。
MouseEvent事件:任何组件都可以发生鼠标事件。
FocusEvent焦点事件:组件可以触发焦点事件。
KeyEvent事件:按下、释放、敲击键盘上一个键就会触发键盘事件。
WindowEvent事件:当一个窗口被激活、撤销激活、打开、关闭、图标化、撤销图标化,触发窗口事件。
9.5 使用MVC结构(模型-视图-控制器)
模型:用于存储数据的对象。
视图:为模型提供数据显示的对象
控制器:处理用户的交互操作
9.6 对话框
对话框分为无模式和有模式两种。当这个对话框处于激活状态时,只让程序响应对话框内部的事件,而且将堵塞其它线程的执行,用户不能再激活对话框所在程序中的其它窗口,直到该对话框消失不可见。无模式对话框:当这个对话框处于激活状态时,能再激活其它窗口,也不堵塞其它线程的执行。