分享

Swing 图形用户界面中常用的组件

 老年图书馆 2012-05-26
Swing 图形用户界面中常用的组件
2008-08-07 19:04

9.1
9.3
JLable
组件
9.4
JButton
组件与JToggleButton
组件
9.5
JCheckBox
和JRadioButton
组件
9.6
JComboBox
组件
9.7
JList
组件
9.8
JTextField
与JTextArea
组件

9.1 Swing


图9.1 图形用户界面中常用的组件

9.1.1
JApplet
由于所有的Swing GUI组件都应该包含在JApplet小程序
中,且javax.Swing.JApplet是java.applet.Applet的子类,所以本章
主要介绍javax.Swing的“J组件”,应用程序均以JApplet小程序为
例。JApplet的使用与Applet小程序相似,它们与HTML文件的
配合没有什么差别,差别仅在默认布局策略与个别方法的使用
上,这将在讲述到有关内容时加以讨论。

9.1.2 Swing
中常用的包
由于Swing功能相当强大且复杂,考虑到功能分解的原
则,Java系统将Swing按不同功能分为表9.1所示的若干个包,
它们分别针对于不同的组件及事件。

表9.1 Swing
中常用的包
包 名说 明
javax.swing 最常用的包,包含了各种Swing组件的类
javax.swing.border 包含与Swing组件外框有关的类
javax.swing.colorchooser 针对Swing调色版组件(JColorChooser)设计的类
javax.swing.event 处理由Swing组件产生的事件
javax.swing.filechooser 包含针对Swing文件选择对话框(JFileChooser)所设计的类
javax.swing.plaf 处理Swing组件外观的相关类

javax.swing.table 针对Swing组件表格(JTable)所设计的类
javax.swing.text
包含与Swing文字组件相关的类
javax.swing.text.html
javax.swing.text.html.parser
javax.swing.text.rtf
javax.swing.tree 针对Swing树状元素(JTree)所设计的类
javax.swing.undo 提供Swing文字组件的Redo与Undo功能
表9.1 Swing
中常用的包

9.1.3
常用组件的继承关系
由于本章所述组件所使用的成员方法主要是继承其直接父类
或更高层父类的成员方法,为了正确地使用这些组件,有必要
了解每个组件的继承关系。本章所述组件的继承关系如下:
java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent

javax.swing.JLabel
javax.swing.JTextField
javax.swing.JTextArea
javax.swing.JList
javax.swing.JComboBox
javax.swing.AbstractButton
javax.swing.JButton
javax.swing.JToggleButton
javax.swing.JCheckBox
javax.swing. JRadioButton

9.2
事件响应原理
设计和实现图形用户界面的工作主要有两个:一是创建组
成界面的各种成分和元素,指定它们的属性和位置关系,根据
具体需要排列它们,从而构成完整的图形用户界面的物理外
观;二是定义图形用户界面的事件和各界面元素对不同事件的
响应,从而实现图形用户界面与用户的交互功能。

图形用户界面之所以能为广大用户所喜爱并最终成为事实
上的标准,很重要的一点就在于图形用户界面的事件驱动机
制,它可以根据产生的事件来决定执行相应的程序段。事件
(event)代表了某对象可执行的操作及其状态的变化。例如,在
图形用户界面中,用户可以通过移动鼠标对特定图形界面元素
进行单击、双击等操作来实现输入/输出操作。

9.2.1
委托事件模型
Java采用委托事件模型来处理事件。委托事件模型的特点是
将事件的处理委托给独立的对象,而不是组件本身,从而将使用
者界面与程序逻辑分开。整个“委托事件模型”由产生事件的对象
(事件源)、事件对象及监听者对象之间的关系所组成。
产生事件的对象会在事件产生时,将与该事件相关的信息封
装在一个称之为“事件对象”的对象中,并将该对象传递给监听者
对象,监听者对象根据该事件对象内的信息决定适当的处理方式。
监听者对象要收到事件发生的通知,必须在程序代码中向产生事
件的对象注册,当事件产生时,产生事件的对象就会主动通知监
听者对象,监听者对象就可以根据产生该事件的对象来决定处理
事件的方法。
监听者对象(listener)就是用来处理事件的对象。监听者对象
等候事件的发生,并在事件发生时收到通知。

9.2.2 Swing
组件的事件及监听者
不同事件源上发生的事件种类不同,不同的事件由不同的
监听者处理。表9.2列出了Swing中各种组件可激发的事件及事
件监听者之间的对应关系。表9.3列出了Swing提供的各事件监
听者与各事件类成员方法之间的关系。请读者务必注意:对应
不同事件需要不同的事件监听者,而每个事件监听者都有相应
的成员方法,我们处理事件的程序代码要写在对应的成员方法
体中。

表9.2 Swing
中组件、事件及事件监听者之间的对应关系
组 件
可激发的事件
(Event) 事件监听者(EventListener)
AbstractButton
(JButton,JToggleButton,
JCheckBox,JRadioButton
)
ActionEvent
ChangeEvent
ItemEvent
ActionListener
ChangeListener
ItemListener
JFileChooser ActionEvent ActionListener
JTextField
JPasswordField
ActionEvent
CaretEvent
DocumentEvent
UndoableEvent
ActionListener
CaretListener
DocumentListener
UndoableListener

表9.2 Swing
中组件、事件及事件监听者之间的对应关系
JTextArea
CaretEvent
DocumentEvent
UndoableEvent
CaretListener
DocumentListener
UndoableListener
JTextPane
JEditorPane
CaretEvent
DocumentEvent
UndoableEvent
HyperlinkEvent
CaretListener
DocumentListener
UndoableListener
HyperlinkListener
JComboBox ActionEvent
ItemEvent
ActionListener
ItemListener
JList ListSelectionEvent
ListDataEvent
ListSelectionListener
ListDataListener

表9.2 Swing
中组件、事件及事件监听者之间的对应关系
JMenuItem
ActionEvent
ChangeEvent
ItemEvent
MenuKeyEvent
MenuDragMouseEvent
ActionListener
ChangeListener
ItemListener
MenuKeyListener
MenuDragMouseListener
JMenu MenuEvent MenuListener
JPopupMenu PopupMenuEvent PopupMenuListener
JProgressBar ChangeEvent ChangeListener
JSlider ChangeEvent ChangeListener
JScrollBar AdjustmentEvent AdjustmentListener

表9.2 Swing
中组件、事件及事件监听者之间的对应关系
JTable
ListSelectionEvent
TableModeEvent
TableColumnModelEvent
CellEditorEvent
ListSelectionListener
TableModeListener
TableColumnModelListener
CellEditorListener
JTabbedPane ChangeEvent ChangeListener
JTree
TreeSelectionEvent
TreeExpansionEvent
TreeWillExpandEvent
TreeModeEvent
TreeSelectionListener
TreeExpansionListener
TreeWillExpandListener
TreeModeListener
JTimer ActionEvent ActionListener

表9.3 Swing
提供的各监听者与各事件类成员方法之间的关系
事件监听者成 员 方 法
CaretListener caretUpdate(CaretEvent e)
CellEditorListener editingCanceled(ChangeEvent e)
editingStopped(ChangeEvent e)
ChangeListener stateChanged(ChangeEvent e)
DocumentListener
changedUpdate(DocumentEvent e)
insertUpdate(DocumentEvent e)
removeUpdate(DocumentEvent e)
HyperlinkListener hyperlinkUpdate(HyperlinkEvent e)

表9.3 Swing
提供的各监听者与各事件类成员方法之间的关系
ListDataListener
contentsChanged(ListDataEvent e)
intervalAdded(ListDataEvent e)
intervalRemoved(ListDataEvent e)
ListSelectionListener valueChanged(ListSelectionEvent e)
MenuDragMouseListener
menuDragMouseDragged(MenuDragMouseEvent e)
menuDragMouseEntered(MenuDragMouseEvent e)
menuDragMouseExited(MenuDragMouseEvent e)
menuDragMouseReleased(MenuDragMouseEvent e)

MenuKeyListener
menuKeyPressed(MenuKeyEvent e)
menuKeyReleased(MenuKeyEvent e)
menuKeyTyped(MenuKeyEvent e)
MenuListener
menuCanceled(MenuEvent e)
menuDeselected(MenuEvent e)
menuSelected(MenuEvent e)
PopupMenuListener
popupMenuCanceled(PopupMenuEvent e)
popupMenuWillBecomelavisible(PopupMenuEvent e)
popupMenuWillB ecomeVisible(PopupMenuEvent e)
表9.3 Swing
提供的各监听者与各事件类成员方法之间的关系

TableColumnModelListener
columnAdded(TableColumnModelEvent e)
columnMarginChanged(ChangeEvent e)
columnMoved(TableColumnModelEvent e)
columnRemoved(TableColumnModelEvent e)
columnSelectionChanged(ListSelectionEvent e)
TableModelListener tableChanged(TableModelEvent e)
表9.3 Swing
提供的各监听者与各事件类成员方法之间的关系

9.2.3
Java.awt
事件类继承关系
Java语言提供了一组事件类来处理不同对象产生的事件。
Java.awt事件类的继承关系如下:
java.awt.Object
java.util.Event
Java.util.Event.Object
. java.awt.AWTEvent
java.awt.event.ActionEvent.
java.awt.event.AdjustmentEvent
java.awt.event.InvocationEvent

java.awt.event.ItemEvent
java.awt.event.TextEvent
java.awt.event.ComponentEvent
java.awt.event.ContainerEvent
java.awt.event.FocusEvent
java.awt.event.PaintEvent
java.awt.event.WindowEvent
java.awt.event.InputEvent
java.awt.event.KeyEvent
java.awt.event.MouseEvent

9.2.4 AWT
中的事件与事件监听者
Swing并不是用来取代原有的AWT的,事实上当我们使用
Swing组件时常常还是需要使用AWT功能的。例如,鼠标和键盘
操作、窗口的变化、组件的增加或删除等都是比较低层的事
件,对于这些事件我们必须使用AWT包提供的处理方法来处理。
所有的Swing组件都是java.awt.Component的子类,它们具有
如下继承关系:
java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing的各种swing组件

所以,可以利用java.awt.Component类与java.awt.Container
类提供的事件及事件监听者来处理诸如鼠标和键盘操作等低层
事件。
表9.4列出了java.awt.Component与java.awt.Container类提供
的事件与事件监听者之间的关系。表9.5列出了各事件监听者与
各成员方法之间的对应关系。同理,对于AWT中的不同事件需
要不同的事件监听者,而每个监听者都有相应的成员方法,我
们处理事件的程序代码要写在对应的成员方法体中。

表9.4 Component
类与Container
类提供的事件
与事件监听者之间的关系
事 件
(Event) 事件监听者(Listener) 说 明
ComponentEvent ComponentListener 主要处理组件大小的改变,位置的改变
及可见与不可见状态等
ContainerEvent ContainerListener 主要处理组件的加入或移出容器
FocusEvent FocusListener 主要处理取得焦点或移开焦点等操作
KeyEvent KeyListener 主要处理键盘的操作
MouseEvent MouseListener 主要处理鼠标是否在某个组件上、是否
按下鼠标等操作
MouseMotionEve
nt
MouseMotionListene
r 主要追踪鼠标的位置
WindowEvent WindowListener 主要处理窗口问题,如打开、关闭、最
大或最小化等

表9.5 AWT
的各事件监听者与各成员方法之间的关系
AWT事件监听者成 员 方 法
ActionListener actionPerformed(ActionEvent e)
WindowListener
windowActivated(WindowEvent e)
windowClosed(WindowEvent e)
windowClosing(WindowEvent e)
windowDeactivated(WindowEvent e)
windowDeiconified(WindowEvent e)
windowIconified(WindowEvent e)
windowOpened(WindowEvent e)
MouseListener
mouseClicked(MouseEvent e)
mouseEntered(MouseEvent e)
mouseExited(MouseEvent e)
mousePressed(MouseEvent e)
mouseReleased(MouseEvent e)

表9.5 AWT
的各事件监听者与各成员方法之间的关系
MouseMotionListener
mouseDragged(MouseEvent e)
mouseMoved(MouseEvent e)
ContainerListener
componentAdded(ContainerEvent e)
componentRemoved(ContainerEvent e)
ComponentListener
componentHidden(ComponentEvent e)
componentMoved(ComponentEvent e)
componentResized(ComponentEvent e)
componentShown(ComponentEvent e)
FocusListener
focusGained(FocusEvent e)
focusLost(FocusEvent e)
ItemListener itemStateChanged(ItemEvent e)
KeyListener
keyPressed(KeyEvent e)
keyReleased(KeyEvent e)
keyTyped(KeyEvent e)
AdjustmentListener adjustmentValueChanged(AdjustmentEvent e)

9.3
JLable


JLable组件被称为标签,它是一个静态组件,也是标准组
件中最简单的一个组件。每个标签用一个标签类的对象表示,
可以显示一行静态文本。标签只起信息说明的作用,而不接受
用户的输入,也无事件响应。
创建标签JLable类对象的构造方法如表9.6所示。

表9.6
JLable
类对象的构造方法构



构 造 方 法功能及参数说明
JLable( ) 创建一个空标签
JLable(Icon icon) 创建图标为icon的标签
JLable(Icon icon,int halig)
创建图标为icon的标签,并指定水平排列方式(LEFT、
CENTER、RIGHT、LEADING和TRAILING)
JLable(String text) 创建一个含有文字的标签
JLable(String text,int halig) 创建一个含有文字的标签,并指定水平排列方式
JLable(String text,Icon icon,int halig) 创建一个含有文字及图标的标签,并指定水平排列方

表9.7
JLable
类常用成员方法
成 员 方 法功 能 说 明
Icon getIcon( ) 获取此标签的图标
void setIcon(Icon icon) 设置标签的图标
String getText( ) 获取此标签的文本
void setText(String lable) 设置标签的文本
void setHorizontalAlignment(int alig) 设置标签内组件的水平对齐方式
void setVerticalAlignment(int alig) 设置标签内组件的垂直对齐方式
void setHorizontalTextPosition(int tp) 设置标签内文字与图标的水平相对位

void setVerticalTextPosition (int tp) 设置标签内文字与图标的垂直相对位

9.4
JButton
组件与JToggleButton
组件
JButton组件与JToggleButton组件通常被称为按钮,它是一个
具有按下、抬起两种状态的组件。用户可以指定按下按钮(单击事
件)时所执行的操作(事件响应)。按钮上通常有一行文字(标签)或
一个图标以表明它的功能。此外,Swing组件中的按钮还可以实现
下述效果:
(1) 改变按钮的图标,即一个按钮可以有多个图标,可根据
Swing按钮所处的状态而自动变换不同的图标。
(2) 为按钮加入提示,即当鼠标在按钮上稍做停留时,在按钮
边可出现提示,当鼠标移出按钮时,提示自动消失。
(3) 在按钮上设置快捷键。
(4) 设置默认按钮,即通过回车键运行此按钮的功能。

9.4.1
AbstractButton
类的常用成员方法
表9.8
AbstractButton
类常用成员方法
成 员 方 法功 能 说 明
Icon getIcon( ) 获取默认图标
void setIcon(Icon icon) 设置此按钮的默认图标
String getLabel( ) 获取标签文本
void setLabel(String lable) 设置标签的文本
void setHorizontalAlignment(int alig) 设置文本与图标的水平对齐方式(CENTER,LEFT,
RIGHT,LEADING,TRAILING)
void setVerticalAlignment(int alig) 设置文本与图标的垂直对齐方式(CENTER,TOP,
BOTTOM)

表9.8
AbstractButton
类常用成员方法
void setHorizontalTextPosition(int tp)
设置文本与图标的水平相对位置CENTER,LEFT,
RIGHT,LEADING,TRAILING)
void setVerticalTextPosition (int tp)
设置文本与图标的垂直相对位置(CENTER,TOP,
BOTTOM)
String getText( ) 获取此按钮的文本
void addChangeListener(ChangeListener I) 给按钮添加指定的ChangeListener
void addActionListener(ActionListener I) 给按钮添加指定的ActionListener
void addItemListener(ItemListener I) 给按钮添加指定的ItemListener
void removeActionListener(ActionListener
I)
从按钮中删除指定的ActionListener
void remove
ChangeListener(ChangeListener I)
从按钮中删除指定的ChangeListener

表9.8
AbstractButton
类常用成员方法
void remove
ItemListener(ItemListener I) 从按钮中删除指定的ItemListener
void setPressedIcon(Icon pricon) 设置按钮按下时的图标
void setRolloverIcon(Icon roicon) 设置鼠标经过时按钮的图标
void setRolloverEnabled(boolean b) 设置翻转效果是否有效
void setRolloverSelectedIcon(Icon
seicon) 设置按钮的翻转并选择图标
void setEnabled(boolean b) 设定按钮是否禁用
void setSelected(boolean b) 设置按钮的状态
void setText(String text) 设置按钮的文本
boolean isSelected( ) 获取按钮的状态
Icon getSelectedIcon( ) 获取按钮的图标

9.4.2
JButton
类的构造方法
按钮可分为有、无标签的和有、无图标的等几种情况,因
此,系统提供了表9.9所示的JButton类的构造方法来创建这几种
按钮对象。
表9.9
JButton
类构造方法
构 造 方 法功 能 说 明
JButton( ) 创建一个无标签的按钮
JButton(String text) 创建一个有标签的按钮
JButton(Icon icon) 创建一个有图标的按钮
JButton(String text, Icon icon) 创建一个有标签和图标的按钮

9.4.3
JToggleButton
类的构造方法
JToggleButton按钮与JButton按钮的区别仅在于:当按下
JButton按钮并释放鼠标后,按钮会自动弹起;按下
JToggleButton按钮并释放鼠标后,按钮不会自动弹起,除非再
按一次。表9.10列出了JToggleButton类的构造方法。

表9.10
JToggleButton
类构造方法
构 造 方 法功 能 说 明
JToggleButton( ) 创建一个无标签的按钮
JToggleButton(String text) 创建一个标签为text的按钮
JToggleButton(String text, boolean selected) 创建一个有标签的按钮,且初始状态为false
JToggleButton(Icon icon) 创建一个图标为icon的按钮
JToggleButton(Icon icon, boolean selected) 创建一个有图标的按钮,且初始状态为false
JToggleButton(String text, Icon icon) 创建一个既有标签又有图标的按钮
JToggleButton(String text, Icon icon, boolean selected) 创建一个有标签和图标的按钮,且初始状态为
false

9.4.4
ActionEvent
事件及其响应
按照Java的委托事件模型,当我们在所设计的用户界面上
按下一个按钮时会激发一个事件,这个事件称为动作事件。动
作事件由AWT的ActionEvent类的方法来处理。
1
.动作事件
ActionEvent类含有ACTION_PERFORMED事件,它是引
发某个动作的执行事件。能触发这个事件的动作包括:单击按
钮;双击一个列表中的选项;选择菜单项;在文本框中输入回
车等。

2
.ActionEvent
类可使用的主要方法
getSource( )方法:用来获取引发事件的对象名。
getActionCommand( )方法:用来获取对象的标签或事先为
这个对象设置的命令名。
getSource( )方法是EventObject类提供的,
getActionCommand( )方法是ActionEvent类提供的。由于
ActionEvent类继承了EventObject类,因此,ActionEvent类可以
使用这两个方法。

3
.事件响应
当用户点击对象时,就会引发ActionEvent类代表的动作事件。
例如,下面的语句:
对象名.addActionListener(this);
注册事件源对象的监听者对象为this,而且要求this对象的类
必须声明该类并实现ActionListener接口。当事件发生时,引发
的事件将被此事件的监听者监听到,并引用ActionListener的
actionPerformed(ActionEvent e)方法响应动作事件。在此方法体
中可以引用ActionEvent事件的getSource( )方法来获取引发事件
的对象,也可以引用getActionCommand( )方法来获取对象标签
或事先为这个对象设置的命令名。用户可在actionPerformed( )方
法体中写入处理此事件的程序代码。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多