Java语言程序设计(第二版)课件第11章 图形用户界面设计_第1页
Java语言程序设计(第二版)课件第11章 图形用户界面设计_第2页
Java语言程序设计(第二版)课件第11章 图形用户界面设计_第3页
Java语言程序设计(第二版)课件第11章 图形用户界面设计_第4页
Java语言程序设计(第二版)课件第11章 图形用户界面设计_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

图形用户界面设计第11章2目标GUI相关概念布局管理器事件处理常用Swing组件

311.1.1GUI包和简单GUI程序2-11.java.awt包称为抽象窗口工具集AWT(AbstractWindowToolkit),是使用Java进行GUI设计的基础。2.javax.swing包Swing组件存放在javax.swing包中。几乎所有AWT组件对应有新功能更强的Swing组件。另外还加入了一些全新的组件。Swing组件在名称上前面多了一个字母“J”。411.1.1GUI包和简单GUI程序2-23.设置GUI应用程序的流程:(1)引用需要的包和类。(2)设置一个顶层的容器。(3)根据需要为容器设置布局管理器或使用默认布局管理器。(4)将组件添加到容器内,位置自行设计。(5)为响应事件的组件编写事件处理代码。511.1.2容器、组件、布局和观感1.容器和组件组件是可以用图形化的方式显示在屏幕上并能够与用户进行交互的对象。容器是一种特殊的组件,一种能够容纳其他组件或容器的组件。2.布局管理器为了使图形用户界面具有良好的平台无关性,提供了专门用来管理组件在容器中的布局的工具。3.观感决定swing应用程序的外观。611.2布局管理器Java中的布局类型包括以下几种:FlowLayout(流式布局)BorderLayout(边界布局)GridLayout(网格布局)CardLayout(卡片布局)

GridBagLayout(网格包布局)711.2.1FlowLayout布局管理器FlowLayout的构造函数有:FlowLayout():生成一个默认的流式布局FlowLayout(intalignment):可以设定每一行组件的对齐方式FlowLayout(intalignment,inthorz,intvert):可以设定组件间的水平和垂直距离

Applet和面板的缺省布局组件从左上角开始按从左到右、从上到下的方式排列FlowLayoutmylayout=newFlowLayout();FlowLayoutexLayout=newFlowLayout(FlowLayout.RIGHT);setLayout(exlayout);//为容器设置新布局

811.2.2BorderLayout布局管理器下面是BorderLayout所定义的构造函数:-BorderLayout():生成默认的边界布局-BorderLayout(inthorz,intvert):可以设定组件间的水平和垂直距离窗口、框架和对话框等的缺省布局组件被置于容器的北、南、东、西或中间位置...setLayout(newBorderLayout());

ButtonbtnEast=newButton("东");

ButtonbtnWest=newButton("西");

ButtonbtnNorth=newButton("北");

ButtonbtnSouth=newButton("南");

ButtonbtnCenter=newButton("中");

add(btnEast,BorderLayout.EAST);add(btnWest,BorderLayout.WEST);add(btnNorth,BorderLayout.NORTH);add(btnSouth,BorderLayout.SOUTH);add(btnCenter,BorderLayout.CENTER);911.2.3GridLayout布局管理器GridLayout的构造函数如下所示:

-

GridLayout():生成一个单列的网格布局-GridLayout(introw,intcol):生成一个设定行数和列数的网格布局-GridLayout(introw,intcol,inthorz,intvert):可以设置组件之间的水平和垂直间隔用于将容器区域划分为一个矩形网格组件按行和列排列...

Buttonbtn[];//声明按钮数组

Stringstr[]={"1","2","3","4","5","6","7","8","9"};setLayout(newGridLayout(3,3));btn=newButton[str.length];//创建按钮数组for(inti=0;i<str.length;i++){

btn[i]=newButton(str[i]);add(btn[i]);}1011.2.4CardLayout布局管理器可存储几个不同的布局。每个布局就像是一个卡片组中的一张卡片。在一个给定的时间总会有一张卡片在顶层。卡片通常为一个Panel对象。每当需要许多面板切换,而每个面板需要显示为不同布局时,可以使用卡片布局。1111.2.5GridBagLayout布局管理器通过使用以下语法容器可获得GridBagLayout:GridBagLayoutgb=newGridBagLayout();ContainerName.setLayout(gb);要使用此布局,必须提供各组件的大小和布局等信息。GridBagConstraints类中包含GridBagLayout类用来定位及调整组件大小所需的全部信息。组件大小不必相同组件按行和列排列放置顺序不一定为从左至右和由上至下12GridBagConstraints类2-1成员变量列表:gridx,gridy:指定组件放置于哪个单元中gridwidth,gridheight:指定组件将占用多少行和多少列weightx,weighty:指定在一个GridBagLayout中应如何分配空间,这些变量的缺省值为0ipadx,ipady:指定组件的最小高度和宽度13成员变量列表:fill:指定在单元大于组件的情况下,组件如何填充此单元,共有4可选值。缺省值为:GridBagConstraints.NONEanchor:指定将组件放置在单元中的位置,共有9个可选值。缺省值为:GridBagConstraints.CENTER

GridBagConstraints类2-21411.2.6swing布局管理器1.BoxLayout布局管理器

按照从上到下(即Y轴)或者从左到右(即X轴)的顺序来依次排列组件。2.ScrollPaneLayout布局管理器是JScrollPane中的内置布局管理器,所以不需要单独创建,会自动设置。1511.2.7Null布局管理器在某些情况下,用户不想使用布局管理器,需要自己设置组件的位置和大小,这时应取消容器的布局管理器,然后再进行设置,否则用户自定义设置将会被布局管理器覆盖。取消布局管理器的方法是:

setLayout(null);用户使用setLocation()、setSize()、setBounds()等方法为组件设置位置和大小。需要注意的是,这种方法会导致程序与系统相关,如不同的分辨率会产生不同的效果。1611.3.1事件处理模型Java最新的事件处理方法是基于授权事件模型当事件来源对象因用户的操作(鼠标或键盘),系统会自动触发此事件类对象E,并通知所授权的事件监听者A(若来源对象已向A注册),事件监听者A中有处理各种事件的方法(事件处理者1~n)便会处理此事件E的各种状况。1711.3.2事件层次结构2-1事件类说明事件源ActionEvent通常按下按钮,双击列表项或选中一个菜单项时,就会生成此事件。Button、List、MenuItem、TextFieldAdjustmentEvent操纵滚动条时会生成此事件。ScrollbarComponentEvent当一个组件移动、隐藏、调整大小或成为可见时会生成此事件。ComponentItemEvent单击复选框或列表项时,或者当一个选择框或一个可选菜单的项被选择或取消时生成此事件。Checkbox、CheckboxMenuItem、Choice、ListFocusEvent组件获得或失去键盘焦点时会生成此事件。Component1811.3.2事件层次结构2-2事件类说明事件源KeyEvent接收到键盘输入时会生成此事件。ComponentMouseEvent拖动、移动、单击、按下或释放鼠标或在鼠标进入或退出一个组件时,会生成此事件。ComponentContainerEvent将组件添加至容器或从中删除时会生成此事件。ContainerTextEvent在文本区或文本域的文本改变时会生成此事件。TextField、TextAreaWindowEvent当一个窗口激活、关闭、失效、恢复、最小化、打开或退出时会生成此事件。

Window1911.3.3事件处理方法

实现事件监听器接口法:首先给组件注册监听器,使用下列方法:

addxxxListener(事件监听器对象);

确定了事件监听器的类型后,必须在程序中定义类来实现这些接口,重写接口中的所有方法。addKeyListener(newCharType());

publicclassCharTypeimplementsKeyListener{publicvoidkeyPressed(KeyEvente){……}//大括号中为处理事件的代码publicvoidkeyReleased(KeyEvente){}//未用到此方法,所以方法体为空publicvoidkeyTyped(KeyEvente){}}

2011.3.4事件适配器

使用实现事件监听器接口的方法处理事件时,必须重写监听器接口中的所有方法,尽管有些方法不会用到。继承事件适配器类,只需要重写所需要的方法即可。addKeyListener(newCharType());

为事件源注册事件监听器的方法同上。publicclassCharTypeextendsKeyAdapter{publicvoidkeyPressed(KeyEvente){……}//大括号中为处理事件的代码}}

2111.4.1常用容器组件3-1

是放置其他

Swing组件的顶级容器JFrame组件用于在Swing程序中创建窗体它的构造函数:JFrame()JFrame(StringTitle)组件必须添加至内容窗格,而不是直接添加至JFrame对象,示例:

frame.getContentPane().add(b);2211.4.1常用容器组件3-2JPanel组件是一个中间容器用于将小型的轻量级组件组合在一起JPanel的缺省布局为FlowLayoutJPanel具有下列构造函数:JPanel()JPanel(LayoutManagerlm)2311.4.1常用容器组件3-3

JApplet也是一种窗口容器,继承自Applet类,Applet小程序是另一种Java程序,与Applet不同的是,它默认的布局管理器是JAppletBorderLayout,而Applet默认的布局管理器是FlowLayout。可直接向Applet窗口中添加组件,但JApplet不行,添加组件时必须添加到其内容窗格中。得到内容窗格使用方法:

getContentPane();2411.4.2标签(JLabel)它既可以显示文本也可以显示图像构造函数如下:JLabel(Iconicon):icon表示使用的图标JLabel(Stringtext,Iconicon,intalign):text表示使用的字符串;icon表示使用的图标;align表示水平对齐方式,其值可以为:LEFT、RIGHT、CENTER。其它常用方法

getText()setText(Stringtext)2511.4.3按钮(JButton)可以使用以下任一构造函数来创建按钮:JButton():新建一个空的按钮JButton(Iconicon)JButton(Stringtext)JButton(Stringtext,Iconicon)JButtonbtnOk=newJButton("确定!");JButtonbtnCancel=newJButton("取消!");

getContentPane.add(btnOk);getContentPane.add(btnCancel);2611.4.4文本框--JTextFieldJTextField组件允许输入或编辑单行文本此类的构造函数包括:JTextField()JTextField(Documentdoc,Stringtext,intcolumns)JTextField(intcolumns)JTextField(Stringtext)JTextField(Stringtext,intcolumns)…Containercon=getContentPane();con.setLayout(newFlowLayout());JLabeljl=newJLabel(“文本域”);con.add(jl);JTextFieldtf=newJTextField(20);con.add(tf);

…2711.4.4文本框--JPasswordFieldJPasswordField组件允许输入或编辑单行文本,并且文本被其他字符代替。此类的构造函数与单行文本框类似。其它方法:char[]getPassword()chargetEchoChar()voidsetEchoChar(charc)2811.4.4文本框--JTextAreaJTextArea组件用于接受来自用户的多行文本它可实现可滚动界面JTextArea组件可使用下列构造函数创建:JTextArea()JTextArea(introws,intcols)JTextArea(Stringtext)JTextArea(Stringtext,introws,intcols)JTextArea(Documentdoc)JTextArea(Documentdoc,Stringtext,introws,intcols)…JLabeljl=newJLabel(“文本区”);con.add(jl);JTextAreata=newJTextArea(5,10);con.add(ta);

…2911.4.5复选框-JCheckBox复选框用于为用户提供一组选项JCheckBox类具有下列构造函数:JCheckBox()JCheckBox(Iconicon)JCheckBox(Iconicon,booleanselected)JCheckBox(Stringtext)JCheckBox(Stringtext,booleanselected)JCheckBox(Stringtext,Iconicon)JCheckBox(Stringtext,Iconicon,booleanselected)3011.4.6单选按钮-JRadioButton单选按钮允许用户从多个选项中选择其中一个ButtonGroup用于在Swing中创建组JRadioButton对象可使用下列构造函数创建:JRadioButton()JRadioButton(Iconicon)JRadioButton(Icon,booleanselected)JRadioButton(Stringtext)JRadioButton(Stringtext,booleanselected)JRadioButton(Stringtext,Iconicon)JRadioButton(Stringtext,Iconicon,booleanselected)3111.4.7列表框-JListpublicJList():使用空模型构造JListpublicJList(ListModeldataModel)

:构造一个列表,用它显示指定模型中的元素。

publicJList(Object[]listData)

:构造一个列表以显示指定数组listData的元素。

JList不支持滚动。要启用滚动,可使用下列代码:JScrollPanemyScrollPane=newJScrollPane(); myScrollPane.getViewport().setView(dataList);…Stringstars[]={"安东尼奥.班德拉斯","来昂纳多.迪卡普尼奥","桑德拉.布洛克","休.格兰特","朱莉亚.罗伯茨"};JListmoviestars=newJList(stars);…3211.4.8组合框-JComboBox文本域和下拉列表的组合在Swing中,组合框由JComboBox表示构造函数如下:publicJComboBox():此构造函数使用缺省数据模型创建JComboBoxpublicJComboBox(ComboBoxModelasModel):使用现有ComboBoxModel中的项目的组合框publicJComboBox(Object[]items):包含指定数组元素的组合框…Stringnames[]={"弗雷德里克.福西斯","约翰.克里沙姆","玛丽.希金斯.克拉克","帕特丽夏.康威尔"};JComboBoxauthors=newJComboBox(names);…3311.4.9滑块-JSliderJSlider():创建滑块默认范围为0至100水平方向JSlider(intorientation):创建范围为0至100,初值为50,水平或垂直滑块。方向取值为JSlider.HORIZONTAL(水平方向)或JSlider.VERTICAL(垂直方向)。JSlider(intmin,intmax):创建范围从min至max,初值min和max的平均值的水平滑块。JSlider(intmin,intmax,

温馨提示

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

评论

0/150

提交评论