图形用户界面_第1页
图形用户界面_第2页
图形用户界面_第3页
图形用户界面_第4页
图形用户界面_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第11章图形用户界面lava

^11.1GUI组件简介

b11.2程序框架

团11.3事件处理

-11.4布局管理器

行11.5基本Swing组件

^11.6高级Swing组件

^11.7习题

n.2程序框架lava

卡要创建一个图形用户界面,首先需要创

建一个特殊的窗口来容纳用户界面组件。

,Java语言中,这个特殊的窗口一般是一

个应用程序框架或applet。

1121创建应用程序框架

*JFram㊀的构造方法:

-publicJFrame()

//创建一个没有标题的框架

-publicJFrame(Stringtitle)

//创建一个带有指定标题的框架

例11-1创建应用程序框架

源代码运行

11.2.2添加组件

例11-2添加组件

源代码运行

例11-3直接调用方法add()添加组件

源代码运行

11.3事件处理

-11.3.1事件和事件源

-11.3.2事件监听器

-11.3.3事件监听适配器

0

J■-J

11.3.1事件和事件源lava

n.3.1事件和事件源(续)

JButton点击按钮ActionEv㊀nt

JT㊀xtFi㊀Id在文本域按回车键ActionEv㊀nt

JCh㊀ckBox点击复选框ActionEv㊀nt、工t㊀mEv㊀nt

JRadioButton点击单选按钮ActionEv㊀nt、工tamEv㊀nt

JComboBox选定选项ActionEv㊀nt、工t㊀mEv㊀nt

JList选定选项ListSelactionEvant

JM㊀nu工t㊀m选定菜单项ActionEv㊀nt、工tamEv㊀nt

JSlid㊀r滑动滑块Chang㊀Evant

Window窗口打开、关闭等WindowEv㊀nt

Component点击或移动鼠标Mous㊀Ev㊀nt

Component按下或释放键KeyEvent

Contain㊀r在容器中添加或删除组件ContainerEvent

Component组件获得或失去焦点FocusEvent

Component组件移动、改变大小等Compon㊀ntEv㊀nt

11.3.2事件监听器

用户事件

触发

通知

事件

操作

注册

组件(事件源)监听器

11.3.2事件监听器(续)

ActionEventActionListeneractionPerformed(ActionEvente)

addActionListener()

ItemEventItemListeneritemStateChanged(ItemEvente)

addltemListener()

MouseEventMouseListenermouseClicked(MouseEvente)

addMouseListener()mousePressed(MouseEvente)

mouseReleased(MouseEvente)

mouseEntered(MouseEvente)

mouseExited(MouseEvente)

MouseEventMouseMotionListenermouseDragged(MouseEvente)

addMouseMotionListener()mouseMoved(MouseEvente)

WindowEventWindowListenerwindowOpened(WindowEvente)

addWindowListener()windowClosing(WindowEvente)

windowClosed(WindowEvente)

windowlconified(WindowEvente)

windowDeiconified(WindowEvente)

windowActivated(WindowEvente)

windowDeactivated(WindowEvente)

ListSelectionEventListSelectionListenervalueChanged(ListSelectionEvente)

addListSelectionListener()

11.3.2事件监听器(续)

例11-4动作事件处理

源代码运行

例11-5使用匿名内部类实现监听器接口

源代码运行

0J■-J

11.3.3事件监听适配器lava

ComponentListenerComponentAdapter

ContainerListenerContainerAdapter

FocusListenerFocusAdapter

KeyListenerKeyAdapter

MouseListenerMouseAdapter

MouseMotionListenerMouseMotionAdapter

WindowListenerWindowAdapter

n.3.3事件监听适配器(续)

卡适配器用空方法实现了相应监听器接口

中的每个方法,因此程序中只需继承相

应适配器,并覆盖必要的方法。

例11-6使用监听适配器

源代码运行

11.4布局管理器

卡布局管理器控制组件在容器中的大小、

形状和位置。

-每种容器都有自己默认的布局管理器O

11.4布局管理器(续)

bBord㊀rLayout

^FlowLayout

^CardLayout

^GridLayout

^GridBagLayout

11.4.1BorderLayout

罚Bord㊀rLayout管理器将容器内的空间戈U分为5

个区域:

-BorderLayout.EAST

-BorderLayout.WEST

-Bord㊀rLayout.SOUTH

-BorderLayout.NORTH

-Bord㊀rLayout.CENTER

其中,每个区域中最多只能容纳一个组件。

11.4.1Bord㊀rLayout(续)

,构造方法:

一publicBord㊀rLayout()

//创建Bord㊀rLayout对象,组件之间没有水平和垂直间。巨

-publicBord㊀rLayout(inthgap,intvgap)

〃以参数指定的水平和垂直间距创建Bord㊀rLayout对象

例11-7BorderLayout

源代码运行

11.4.2FlowLayout

,构造方法:

-publicFlowLayout()

//创建FlowLayout对象,对齐方式是默认的居中对齐,

//组件之间的水平和垂直间距都是默认的5个像素

-publicFlowLayout(intalign)

//以参数指定的对齐方式创建FlowLayout对象,组件之

//间的水平和垂直间距都是默认的5个像素

-publicFlowLayout(intalign,int

hgap,intvgap)

//以参数指定的对齐方式、水平和垂直间距创建

//FlowLayout对象

11.4.2FlowLayout(续)

bFlowLayout管理器根据容器的组件排列方向属性

(Compon㊀ntOri㊀ntation),简单地将容器中的

组件按添加的先后顺序依次摆放(默认情况下是从左

到右),如果一行排满,则在下一行中继续。

例11-8FlowLayout

源代码运行

例11-9设置容器的组件由卜列方向属性

源代码运行

0

J■-J

11.4.3GridLayoutlava

-GridLayout管理器把容器的空间平均划分为若干行

乘若干列的矩形网格,每一个网格中只能添加一个组

件。

,如果程序指定了划分的具体非0行数,编译器将忽略指

定的具体列数,实际列数将由指定的行数和实际的组

件数决定。只有在行数指定为0时,指定的列数才有实

际意义。不过,行数和列数不能同时指定为0,否则运

行时会引发异常。

11.4.3GridLayout(续)

行构造方法:

-publicGridLayout()

//创建GridLayout对象,每行中只有一列

-publicGridLayout(introwsrintcols)

//以参数指定的行数和歹4数创建GridLayout对象,组件之

//间的水平和垂直间距为0

-publicGridLayout(introws,int

colsAinthgapfintvgap)

//以参数指定的行数、列数以及组件之间的水平和垂直间距

//创建GridLayout对彖

例11-10GridLayout

源代码运行

11.4.4CardLayout

①CardLayout将容器当作一个卡片盒,把添加到容器

中的每一个组件当作一张卡片,每次只有一张卡片是

4r见的。为独桌个绡件向见,可以调用CardLayout

对象的如下方法:

-publicvoidfirst(Contain㊀rpar㊀nt)

-publicvoidn㊀xt(Containerpar㊀nt)

-publicvoidprevious(Contain㊀rpar㊀nt)

-publicvoidlast(Containerpar㊀nt)

-publicvoidshow(Containerpar㊀nt.

Stringnam㊀)

注意:上述方法中的参数parent必须是真正容纳

组件的容器类对象,即它寸以是JFrame、JApplet

等的内容窗格或JPanel等的对象,但不能直接接收

JFrame>JApplet等的对象。

11.4.4CardLayout(续)

生将组件添加到CardLayout容器中时需调用

方法:

add(Compon㊀ntcomp,Stringname)

管CardLayout的构造方法:

-publicCardLayout()

-publicCardLayout(inthgap,intvgap)

例11-11CardLayout

源代码运行

11.5基本Swing组件

wll.5.1面板

斤11.5.2标签与按钮

斤11.5.3文本字段与文本区域

面1154复选框与单选按钮

行11.5.5列表框与组合框

11.5.1面板lava

卡面板是用来容纳组件的容器,它不能独

立存在,只能添加到其他容器中。

口面板是JPan㊀1类的对象。

小面板的默认布局器是FlowLayout,它

可以直接容纳组件。

例11-12面板

源代码运行

11.5.2按钮与标签

JButton(按钮)的构造方法:

-publicJButton()

//创建一个没有标记的空按钮

-publicJButton(Iconicon)

//创建一个标有指定图标的按钮

-publicJButton(Stringt㊀xt)

〃创建一个标有指定文字的按钮

-publicJButton(Stringt㊀xt,工conicon)

〃创建一个标有指定文字和图标的按钮

11.5.2按钮与标签(续)

AbstractButton(JButton的父类):

publicvoidaddActionListener(ActionListener1)

publicIcongetlcon()

publicvoidseticon(Icondefaultlcon)

publicStringgetText()

publicvoidsetText(Stringtext)

publicvoidsetEnabled(booleanb)

publicvoidsetHorizontalAlignment(intalignment)

publicvoidsetverticalAlignment(intalignment)

publicvoidsetHorizontalTextPosition(int

textPosition)

publicvoids㊀tV㊀rticalTextPosition(int

textPosition)

11.5.2按钮与标签(续)

b操作按钮可以产生多种事件,不过程序

通常只需响应点击按钮时产生的动作事

件(Activ㊀Ev㊀nt)。

11.5.2按钮与标签(续)ava

JLabel(标签)的构造方法:

-publicJLab㊀1()

-publicJLabel(Iconimag㊀)

-publicJLab㊀1(Iconimag㊀,int

horizontaiAlignment)

-publicJLabel(Stringt㊀xt)

-publicJLabel(Stringt㊀xt,int

horizontalAlignment)

-publicJLabel(Stringt㊀xt,Icon

icon,inthorizontalAIignm㊀nt)

11.5.2按钮与标签(续)lava

行标签不会引发任何事件。

-程序中可以调用相应的方法返回或设置标签

上的文字或图标、文字和图标的对齐方式及

文字与图标的相对位置等。

例11-13按钮与标签

源代码运行

11.5.3文本字段与文本区域

-文本字段与文本区域都是允许用户输入

字符的区域。

行文本字段只允许用户输入一行字符,而

文本区域允许用户输入多行字符。

1153文本字段与文本区域(续)

JTextField(文本字段)的构造方法:

-publicJT㊀xtFi㊀ld()

//创建一个文本字段,初始字符串为空,列数为0

-publicJT㊀xtFi㊀Id(Stringt㊀xt)

//创建一个文本字段,初始字符串为text,列数为0

-publicJTextField(intcolumns)

//创建一个文本字段,初始字符串为空,列数为columns

-publicJT㊀xtFi㊀Id(Stringt㊀xt,int

columns)

//创建一个文本字段,初始字符串为text,列数为columns

1153文本字段与文本区域(续)ava

JTextField:

publicvoidaddActionList㊀n㊀r(

ActionList㊀n㊀r1)

//注册动作事件监听器

publicintg㊀tColumns()

〃返回文本字段的列数

publicvoids㊀tColumns(intcolumns)

//设置文本字段的列数

publicvoids㊀tFont(Fontf)

//设置文本字段中文字的字体

在文本字段中按回车键会引发ActionEv㊀nt

事件。

1153文本字段与文本区域(续)ava

JTextArea(文本区域)的构造方法:

-publicJT㊀xtAr㊀a()

//创建一个文本区域,初始字符串为空,行、列数为0

-publicJT㊀xtAr㊀a(Stringt㊀xt)

//创建一个文本区域,初始字符串为text,行、列数为0

-publicJTextArea(introwsrint

columns)

//创建一个文本区域,初始字符串为空,行数为rows,列

//数为columns

-publicJT㊀xtAr㊀a.(Stringt㊀xt,int

rows,intcolumns)

//创建一个文本区域,初始字符串为text,行数为rows,列

//数为columns

1153文本字段与文本区域(续)

夕TextArea:

publicvoidappend(Stringstr)

//将字符串str添加到文本的尾部

publicvoidr㊀pla。㊀Rang㊀(String

str,intstart,intend)

//用字符串str替换文本中从start到end位置的字符

publicvoidinsert(Stringstrzint

pos)

//将字符串Str插入到文本中的指定位置pos

publicintg㊀tRows()

//返回文本区域的行数

publicvoids㊀tRows(introws)

//设置文本区域的行数

1153文本字段与文本区域(续)

夕与文本字段不同,文本区域不会引发

ActionEv㊀nt事件。

例11.14文本字段与文本区域

源代码运行

11.5.4复选框与单选按钮

用复选框是一个很小的方框,方框旁边可

以标有文字或图标。它有两种状态:被

选或未被选。用户点击某个复选框时,

该复选框会从一种状态转变为另一种状

o

1154复选框与单选按钮(续)

JCheckBox(复选框)的构造方法:

-publicJCheckBox()

-publicJCheckBox(Iconicon)

-publicJCheckBox(Iconicon,bool㊀an

s㊀1㊀ct㊀d)

-publicJCh㊀ckBox(Stringt㊀xt)

一publicJCheckBox(Stringt㊀xt,bool㊀an

s㊀1㊀ct㊀d)

-publicJCheckBox(Stringt㊀xt,Icon

icon)

-publicJCheckBox(Stringt㊀xt,Icon

icon,boo工㊀ans㊀1㊀ct㊀d)

1154复选框与单选按钮(续)lava

复选框的状态可以调用下述方法来获取或设

定:

publicbool㊀anisS㊀1㊀ct㊀d()

publicvoids㊀tS㊀1㊀ct㊀d(bool㊀anb)

点击复选框会引发Activ㊀Ev㊀nt和

工t㊀mEv㊀nt事件。

11-15复选框

源代码运行

1154复选框与单选按钮(续)

卡单选按钮是一个很小的圆,圆旁边可以标有

文字或图标。与复选框相同,每个单选按钮

有两种状态:被选或未被选。用户点击某个

单选按钮时,该单选按钮会从一种状态转变

为另一种状态。与复选框不同的是,在某一

时刻同一组中的单选按钮只有一个被选择,

选择某个单选按钮时,同一组中的其他单选

按钮都会变为未被选;而同一组中的复选框

同时可以有o个、1个或多个被选。

1154复选框与单选按钮(续)

罚JRadioButton(单选按钮)的构造方法:

-publicJRadioButton()

-publicJRadioButton(Iconicon)

-publicJRadioButton(Icon

icon,booleans㊀1㊀ct㊀d)

-publicJRadioButton(Stringt㊀xt)

-publicJRadioButton(String

text,booleans㊀工㊀ct㊀d)

-publicJRadioButton(Stringtext,Icon

icon)

-publicJRadioButton(Stringt㊀xt,Icon

icon,booI㊀anselected)

1154复选框与单选按钮(续)

团创建单选按钮后,通常需要将它们归属到某

个组:

(1)首先仓Li建javax.swing.ButtonGroup类

的对象;

(2)调用ButtonGroup类中定义的方法

add(AbstractButtonb)将单选按钮添力口至U该

对象中。

注意:添力口至1J同一ButtonGroup对象中的单选

按钮属于同一组,同时只能选择其中之一。

1154复选框与单选按钮(续)

行点击单选按钮会弓I发Activ㊀Ev㊀nt和

工t㊀!nEv㊀nt事件。

例11-16单选按钮

源代码运行

11.5.5组合框与列表

卡组合框也称下拉式列表,它是一些项目

的简单列表。与单选按钮类似,用户可

以从中选择一个。

11.5.5组合框与列表(续)

罚JComboBox(组合框)的构造方法:

-publicJComboBox()

//创建一个组合框,组合框中的选项为空

-publicJComboBox(Object[]items)

//创建一个组合框,组合框中的选项由参数it㊀ms指定

0

J■-J

n.5.5组合框与列表(续)lava

-组合框中的选项可以调用下述方法添加或删除:

publicvoidadd工t㊀m(Obj㊀ctanObject)

//在组合框中添加一个选项anObject

publicvoidr㊀mov㊀工t㊀m(Obj㊀ct

anObj㊀ct)

//在组合框中删除参数anObject指定的选项

publicvoidr㊀mov㊀工t㊀mAt(intanlndex)

//在组合框中删除序号为参数anlndex的选项

publicvoidr㊀mov㊀All工t㊀ms()

//删除组合框中的所有选项

0

J■-J

n.5.5组合框与列表(续)lava

卡调用下述方法可以获取组合框中特定的

选项:

publicObjectg㊀t工t㊀mAt(intindex)

〃返回组合框中序号为参数index的选项

publicintg㊀tS㊀1㊀ct㊀d工nd㊀x()

〃返回组合框中被选择的选项的序号

publicObj㊀ctg㊀tS㊀1㊀ct㊀d工t㊀m()

//返回组合框中被选择的选项

11.5.5组合框与列表(续)

b选定组合框中的选项会引发

例11-17组合框

源代码运行

0

J■-J

n.5.5组合框与列表(续)lava

卡列表允许用户从中进行选择。不过,它与组

合框的外观不同:组合框只有在点击它时才

会显示下拉列表,而列表会在屏幕上持续占

用固定行数的空间。此外,列表还允许用户

同时选择多项:用户在多个选项上同时按下

<Ctrl>键并点击鼠标,就可以选择任意多项,

如果选择某个选项后,按下<Shift>键并同时

点击另一个选项,那么两个选项间的所有选

项都被选择;如果想取消某个选项,只需按

下<Ctrl>键并同时点击该项。

11.5.5组合框与列表(续)

罚JList(列表)的构造方法:

-publicJList()

//创建一个列表,列表中的选项为空

-publicJList(Object[]listData)

//创建一个列表,列表中的选项由参数listData指定

0

J■-J

n.5.5组合框与列表(续)lava

-调用下述方法可以获取列表中特定的选项或

设置可见行数:

publicint[]g㊀tS㊀1㊀ct㊀d工ndi。㊀s()

//返回列表中所有被选择的选项的序号

publicObj㊀ct口g㊀tS㊀1㊀ct㊀dValu㊀s()

//返回列表中所有被选择的选项

publicvoids㊀tVisibl㊀RowCount(int

visib1㊀RowCount)

//设置列表中同时可见的行数为visibleRowCount,默认值

〃为8

11.5.5组合框与列表(续)

b选定列表中的选项会引发

例11-18列表

源代码运行

11.6高级Swing组件

年11.6.1菜单

团1L6.2弹出式菜单

-11.6.3滑块与进度条

行11.6.4消息对话框

11.6.1菜单

*JM㊀nuBar

JM㊀nu

JM㊀nu工t■㊀m

审JCh㊀ckBoxM㊀nu工t㊀m

*JRadioButtonM㊀nu工t㊀m

11.6.1菜单(续)lava

,实现菜单的过程:

1)创建菜单栏,并将它设置到某个容器中:

JM㊀nuBarmb=MwJMenuBar();

JFrameJFram㊀();

fram㊀.s㊀tJM㊀nuBar(mb);

11.6.1菜单(续)lava

,实现菜单的过程:

2)创建菜单条,并将它们添加到菜单栏中:

JM㊀nufile]Ytenu=n,wJM㊀nu("文件”);

JM㊀nu㊀ditM㊀nu=newJM㊀nu("编辑”);

mb.add(fil㊀M㊀nu);

mb.add(㊀ditM㊀nu);

11.6.1菜单(续)lava

,实现菜单的过程:

3)创建菜单项,并将它们添加到菜单条中:

JM㊀nu工t㊀m[]㊀ditm={

newJM㊀nu工t㊀m("剪切”),

newJM㊀nu工t㊀m("复制J"),

n㊀wJMenuItem("粘贝占”),

n㊀wJM㊀nu工t㊀m("全选”)};

for(inti=0;i—ditm.1㊀ngth;i++){

㊀ditM㊀nu.add(㊀ditm[i]);

if(i==2)

㊀ditM㊀nu,adds㊀parator();}

11.6.1菜单(续)

bJCheckBoxMenuItem^O

JRadioButtonMenuItemtfe

甘JM㊀nu是JM㊀nu工t㊀m的子类,因止匕,菜单条组件

可以添加到另一个菜单条中,从而实现多重子菜

单。

11.6.1菜单(续)

e选定菜单项组件会弓I发Activ㊀Ev㊀nt

和工t㊀mEv㊀nt等事件。

例11-19菜单

源代码运行

n62弹出式菜单

卡弹出式菜单是一个小窗口,其中含有多

个菜单项。它通常用于和某个组件结合,

使该组件在某种条件下弹出一个菜单。

11.6.2弹出式菜单(续)lava

JPopupM㊀nupopup=newJPopupM㊀nu();

JM㊀nu工t㊀m口popupm=MwJM㊀nu工t㊀m(“剪切”);

popup.add(popupm);

1162弹出式菜单(续)

-弹出式菜单应和某个组件结合,以使用户在该组件上

按下鼠标右键时将它显现出来。因此,程序应该监听

希望能弹出菜单的组件的鼠标事件(MouseEvent)

并在相关方法中调用JPopupM㊀nu类中的下述方法将

弹出式菜单显现出来:

publicvoidshow(Compon㊀ntinvok㊀r,intxfinty)

例11-20弹出式菜单

源代码运行

n.6.3滑块与进度条

卡滑块允许用户通过移动一个点的方式在

一定范围内输入数据。

行进度条通常用来显示某件工作完成的百

分比。

1163滑块与进度条(续)ava

罚JSlider(滑块)的构造方法:

-publicJSlider()

-publicJSlider(intorientation)

-publicJSlid㊀r(intmin,intmax)

-publicJSlid㊀r(intmin,intmax,int

value)

-publicJSlider(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论