面板(JPanel)是一种通用容器,JPanel的作用是实现界面的层次结构,在它上面放入一些组件,也可以在上面绘画,将放有组件和有画的JPanel再放入另一个容器里。JPanel的默认布局为FlowLayout。 5.4.2 JScrollPane
当一个容器内放置了许多组件,而容器的显示区域不足以同时显示所有组件时,如果让容器带滚动条,通过移动滚动条的滑块,容器中其他位置上的组件就能看到。滚动面板JScrollPane能实现这样的要求,JScroll?Pane是带有滚动条的面板。JScrollPane是Container类的子类,也是一种容器,但是只能添加一个组件。 JScrollPane的一般用法是先将一些组件添加到一个JPanel中,然后再把这个JPanel添加到JScrollPane中。这样,从界面上看,在滚动面板上,好像也有多个组件。在Swing中,像JTextArea、JList、JTable等组件都没有自带滚动条,都需要将它们放置于滚动面板,利用滚动面板的滚动条,浏览组件中的内容。
5.5 布局设计
在界面设计中,一个容器要放置许多组件,为了美观,为组件安排在容器中的位置,这就是布局设计。Java.awt中定义了多种布局类,每种布局类对应一种布局的策略。常用的有以下布局类:
FlowLayout,依次放置组件。
BorderLayout,将组件放置在边界上。
CardLayout,将组件像扑克牌一样叠放,而每次只能显示其中一个组件。
GridLayout,将显示区域按行、列划分成一个个大小相等的格子,组件依次放入这些格子中。
GridBagLayout,将显示区域划分成许多矩形小单元,每个组件可占用一个或多个小单元。
其中GridBagLayout能进行精细的位置控制。每个容器都有一个布局管理器,由它来决定如何安排放入容器内的组件。布局管理器是实现LayoutManager接口的类。
5.5.1 FlowLayout布局
FlowLayout布局是将其中的组件按照加入的先后顺序从左到右排列,一行排满之后就转到下一行继续从左到右排列,每一行中的组件都居中排列。这是一种最简便的布局策略,一般用于组件不多的情况,当组件较多时,容器中的组件就会显得高低不平,各行长短不一。 5.5.2 BorderLayout布局BorderLayout布局策略是把容器内的空间简单地划分为东“East”、西“West”、南“South”、北“North”、中 “Center”五个区域。
BorderLayout布局是JWindow、JFrame和JDialog 的默认布局。
5.5.3 GridLayout布局
GridLayout布局是把容器划分成若干行和列的网格状,行数和列数由程序控制,组件放在网格的小格子中。GridLayout布局的特点是组件定位比较精确。由于GridLayout布局中每个网格具有相同形状和大小,要求放入容器的组件也应保持相同的大小。
5.5.4 CardLayout布局
采用CardLayout布局的容器虽可容纳多个组件,但是多个组件拥有同一个显示空间,某一时刻只能显示一个组件。就像一叠扑克牌每次只能显示最上面的一张
一样,这个显示的组件将占据容器的全部空间。CardLayout布局设计步骤如下: 先创建CardLayout布局对象。然后,使用setLayout()方法为容器设置布局。最后,调用容器的add()方法将组件加入容器。
5.5.5 null布局与setBounds方法
空布局就是把一个容器的布局设置为null布局。空布局采用setBounds()方法设置组件本身的大小和在容器中的位置:
setBounds(intx,inty,intwidth,intheight) 5.6 文本框和文本区
在图形界面中,文本框和文本区是用于信息输入和输出的组件。 5.6.1 文本框
本文本(JTextField)是界面中用于输入和输出一行文本的框。JTextField类用来建立文本框。与文本框相关的接口是ActionListener。 JTextField类的其他常用方法: (1)setFont(Fontf)
(2)setText(Stringtext) (3)getText()
(4)setEditable(boolean)
(5)setHorizontalAlignment(intalignment) (6)requestFocus()
(7)removeActionListener(ActionListener),移去文本框监视器。密码框(JPasswordField)是一个单行的输入组件,与 JTextField基本类似。密码框多一个屏蔽功能,就是在输入时,都会以一个别的指定字符(一般是?字符)输出。除了前面介绍的文本框的方法外,另有一些密码框常用的方法:
(1)getEchoChar(),返回密码框的回显字符。
(2)setEchoChar(char),设置密码框的回显字符。 5.6.2 文本区
文本区(JTextArea)是窗体中一个放置文本的区域。文本区与文本框的主要区别是文本区可存放多行文本。javax.swing包中的JTextArea类用来建立文本 区。JTextArea组件没有事件。
insert(Strings,intx),在指定位置插入指定文本。 replace(Strings,intx,inty) append(Strings)
getCarePosition(),获取文本区中活动光标的位置。 setCarePosition(intn),设置活动光标的位置。
setLineWrap(booleanb),设置自动换行,缺省情况,不自动换行。 6.1 选择框和单选按钮
选择框、单选框和单选按钮都是选择组件,选择组件有两种状态,一种是选中(on),另一种是未选中(off),它们提供一种简单的“on/off”选择功能,让用户在一组选择项目中作选择。
6.1.1 选择框
选择框(JCheckBox)的选中与否形状是一个小方框,被选中则在框中打勾。当在一个容器中有多个选择框,同时可以有多个选择框被选中,这样的选择框也称为复选框。与选择框相关的接口是ItemListener,事件类是ItemEvent。JCheckBox类的其他常用方法如下:
(1)getState(),获取选择框的状态。
(2)setState(booleanb),设置选择框的状态。 (3)isSelected(),获取选择框是否被选中的状态。
(4)itemStateChanged(ItemEvente),处理选择框事件的接口方法
(5)getItemSelectable(),获取事件源 (6)addItemListener(),为选择框设定监视器 6.1.2 单选框
当在一个容器中放入多个选择框,且没有用ButtonGroup对象将它们分组,则可以同时选中多个选择框。如果使用ButtonGroup对象将选择框分组,同一时刻组内的多个选择框只允许有一个被选中,称同一组内的选择框为单选框。单选框分组的方法是先创建ButtonGroup对象,然后将希望为同组的选择框添加到同一个ButtonGroup对象中。
6.1.3 单选按钮
单选按钮(JRadioButton)的功能与单选框相似。使用单选按钮的方法是将一些单选按钮用ButtonGroup对象分组,使同一组内的单选按钮只允许一个被选中。单选按钮与单选框的差异是显示的样式不同,单选按钮是一个圆形的按钮,单选框是一个小方框。
6.1.4 选择项目事件处理
用户对选择框或单选按钮做出选择后,程序应对这个选择作出必要的响应,程序为此要处理选择项目事件。选择项目事件处理程序的基本内容有:监视选择项目的对象的类要实现接口ItemListener,程序要声明和建立选择对象,为选择对象注册监视器,编写处理选择项目事件的接口方法itemStateChanged(ItemEvente),在该方法内用getItemSelectable()方法获取事件源,并作相应处理。 6.2 列表和组合框
列表和组合框是又一类供用户选择的界面组件,用于在一组选择项目中选择,组合框还可以输入新的选择。 6.2.1 列表
列表(JList)在界面中表现为列表框,是JList类或它的子类的对象。程序可以在列表框中加入多个文本选项条目。列表事件的事件源有两种:一是鼠标双击某
个选项,二是鼠标单击某个选项。双击选项是动作事件,与该事件相关的接口是 Ac? tionListener,注册监视器的方法是addAactionListener(),
接口方法是actionPerformed(ActionEvente)。 单击选项是选项事件,与选项事件相关的接口是
ListSelectionListener,注册监视器的方法是addListSe? lectionListener,接口方法是valueChanged(ListSelectio?
nEvente)。
JList类的其他常用方法:
getSelectedIndex(),获取选项的索引。
setSelectionMode(intseleMode),设置列表选择模 型。选择模型有单选和多选两种。
单选:ListSelectionModel.SINGLE_SELECTION。 多选:ListSelectionModel.MULTIPLE_INTER? VAL_SELECTION。 6.2.2 组合框
组合框(JComboBox)是文本框和列表的组合,可以在文本框中输入选项,也可以单击下拉按钮从显示的列表中进行选择。
在JComboBox对象上发生的事件分为两类。一是用户选定项目,事件响应程序获取用户所选的项目。二是用户输入项目后按回车键,事件响应程序读取用户的输入。第一类事件的
接口是ItemListener;第二类事件是输入事件,接口是ActionListener。 6.3 菜单
有两种类型的菜单;下拉式菜单和弹出式菜单。本书只讨论下列菜单编程方法。菜单与JComboBox和JCheekBox不同,它们在界面中是一直可见的。菜单与
JComboBox的相同之处是每次只可以选择一个项目。在下拉式菜单或弹出式菜单中选择一个选项就产生一个ActionEvent事件。该事件被发送给那个选项的监视器,事件的意义由监视器解释。
6.3.1 菜单条、菜单和菜单项
下拉式菜单通过出现在菜单条上的名字来可视化表示,菜单条(JMenuBar)通常出现在JFrame的顶部,一个菜单条显示多个下拉式菜单的名字。一个菜单条可以放多个菜单(JMenu),每个菜单又可以有许多菜单项(JMenuItem)。向窗口增设菜单的方法是:先创建一个菜单条对象,然后再创建若干菜单对象,把这些菜单对象放在菜单条里,再按要求为每个菜单对象添加菜单项。菜单中的菜单项也可以是一个完整的菜单。由于 菜单项又可以是另一个完整菜单,因此可以构造一个层次状菜单结构。 1.菜单条
类JMenuBar的实例就是菜单条。
在窗口中增设菜单条,必须使用JFrame类中的 setJMenuBar()方法。 2.菜单
由类JMenu创建的对象就是菜单。 3.菜单项
类JMenuItem的实例就是菜单项。 4.处理菜单事件
菜单的事件源是用鼠标点击某个菜单项。处理该事件的接口是ActionListener,要实现的接口方法是actionPerformed(ActionEvente),获得事件源的方法是getSource()。 5.嵌入子菜单
创建了一个菜单,并创建多个菜单项,其中某个菜单项又是一个(含其他菜单项的)菜单,这就构成菜单嵌套。 6.向菜单增加退出项
增设一个新的菜单项,对该菜单项加入监视,对应的监视方法中使用法,就能实现单击该菜单项时退出Java运行环境。 7.设置菜单项的快捷键
用 MenuShortcut类为菜单项设置快捷键。构造方法是 MenuShortcut(intkey)。其 中 key 可 以 取 值KeyEvent.VK_A至keyEventVK_Z,也可以取?a?到?z?键码值。菜单项使用setShortcut(MenuShortcutk)方法来设置快捷键。 6.3.2 选择框菜单项
菜单也可以包含具有持久的选择状态的选项,这种特殊 的 菜 单 可 由 JCheckBoxMenuItem 类 来 定 义。JCheckBoxMenuItem对象像选择框一样,能表示一个选项被选中与否,也可以作为一个菜单项加到下拉菜单中。点击JCheckBoxMenuItem菜单项时,就会在它的左边出现打勾符号或清除打勾符号。 6.4 对话框
在Swing中,有两个对话框类,它们是JDialog类和JOptionPane类。JDialog类提供构造并管理通用对话框;JOptionPane类给一些常见的对话框提供许多更便于使用的选项。
6.4.1 JDialong类
JDialog类用作对话框的基类。对话框与一般窗口不同,对话框依赖其他窗口当它所依赖的窗口消失或最小化时,对话框也将消失;窗口还原时,对话框又会自动恢复。对话框分为强制型和非强制型两种。强制型对话框强制对话过程不能中断,直至对话过程结束,才让程序响应对话框以外的事件。非强制型对话框可以中断对话过程,去响应对话框以外的事件。强制型对话框也称有模式对话框,非强制型对话框也称非模式 对话框。JDialog对象也是一种容器,因此也可以给JDialong对象指派布局管理器,对话框的默认布局为BorderLayout布局。但组件不能直接加到对话框中,对话框也包
含一个内容面板,应当把组件加到JDialong对象的内容面板中。由于对话框依赖窗口,因此要建立对话框,必须先要创建一个窗口。 JDialog类常用的构造方法有3个:
(1)JDialog(),构造一个初始不可见的非强制型对话框。 (2)JDialog(JFramef,Strings)。
(3)JDialog(JFramef,Strings,booleanb)。 6.4.2 JOptionPane类
JOptionPane类定义了四个简单对话框类型,下面 给出三个确认对话框:
intresult=JOptionPane.showConfirmDialog(parent,?确实要退出吗??,退出确认?,JOptionPane.YES_NO_CANCEL_OPTION);
输入对话框:JOptionPane.showInputDialog() 输出对话框:JOptionPane.showMessageDialog() 6.5 滚动条
滚动条(JScrollBar)也称为滑块,用来表示一个相对值,该值代指定范围内的一个整数。
在Swing中,用JScrollBar类实现和管理可调界面。 JScrollBar类常用的构造方法是:
JScrollBar(intdir,intinit,intwidth,intlow,inthigh)
注意滑块的宽度可能影响滚动条可得到的实际的最大值。
JScrollBar类对象的事件类型是 AdjustmentEven? ts;类要实现的接口是 AdjustmentListener,接口方法是
adjustmentValueChanged();注册监视器的方法是add? AdjustmentListener();获取事件源对象的方法是get? Adjustable()。
getPreferredSize()是Component类中定义的方法,
界面组件通过覆盖定义该方法确定界面组件的大小。当布局管理器在安排组件的布局时,就会调用该方法来确定组件的大小。这个方法返回一个Dimension类型的对象,Dimension对象含两个整数,分别为组件的宽和高。 6.6 鼠标事件
Java语言为处理鼠标事件提供两个接口:MouseL?
istener接口和 MouseMotionListener接口。
6.6.1 MouseListener接口MouseListener接口能处理5种鼠标事件:接下鼠标键、释放鼠标键、点击鼠标键、鼠标进入和鼠标退出。要实现的 MouseListener接口的方法有:
(1)mousePressed(MouseEvent),负责处理鼠标按下事件。 (2)mouseReleased(MouseEvent),负责处理鼠标释放事件。