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

下载本文档

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

文档简介

1,第9章Java图形用户界面,主要内容:1.图形用户界面简介2.组件3.布局管理器4.事件处理机制,2,1图形用户界面简介,3,图形用户界面或图形用户接口(GraphicalUserInterface,GUI)是指采用图形方式显示的计算机操作环境用户接口Java提供了一系列的用户界面组件,这些组件主要包含在两个包中,一个是抽象窗口工具包(AWT),包名为java.awt;另一个是Swing包,包名为java.swingJava中,图形用户界面由组件、布局管理和事件委托处理三部分组成,Java实用编程技术,1图形用户界面简介,4,组件是响应用户操作的可视图形控件。如窗口、按钮、文本框、列表框等布局管理器是用来控制组件在容器中的摆放位置。Java使用事件委托处理模型来处理事件。,1图形用户界面简介,5,创建一个图形用户界面的方法如下:1)创建一个顶级的容器组件,一般是从框架(JFrame)继承的应用程序主窗口。2)按指定的布局管理器向容器添加组件,给事件元组件添加事件监视器,注册事件处理。3)设计事件处理程序,委托事件处理,响应信息交互。4)显示图形用户界面。,1图形用户界面简介,6,importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassCh0701extendsJFrameimplementsActionListenerJTextFieldtf=newJTextField(10);JButtonbt=newJButton(ok);staticinti=0;publicCh0701()super(图形用户界面);Containerc=getContentPane();c.setLayout(newFlowLayout();c.add(tf);c.add(bt);setSize(200,100);setVisible(true);bt.addActionListener(this);,7,publicvoidactionPerformed(ActionEvente)i=i+1;if(i%2=0)tf.setText(aaaaa);elsetf.setText(bbbbb);publicstaticvoidmain(Stringargs)newCh0701();,8,1.组件,组成图形用户界面要用到组件(Componet)他们是专门用于建立图形用户界面的Java类,这些类主要包含在两个包中,一个是抽象窗口工具包(AWT),包名为java.awt;另一个是Swing包,包名是javax.swing.Swing组件常被称为轻量级组件,因为它们是用java写成的,所以不需要使用平台的GUI功能。而AWT组件要用到本地GUI功能,所以称为重量级组件。,9,组件有两大类:容器和控制组件。控制组件,如:JButtonJTextField等,本身不能独立地显示出来,必须将这些组件放在一定的容器中才可以显示出来。一个容器就是能容纳和排列组件的对象,如JApplet、JPanel、JFrame等。组件通过容器的add方法加入到容器中。,10,窗口-JFrame类,JFrame类用来建立标准的窗口,是Swing中最底层的容器,默认的布局管理器是BorderLayout。JFrame类中有很多方法:如setSize()方法设置窗口的大小,getContentPane()获取窗口的内容显示层,setVisible(true)方法设置该窗口为可见的,show()方法显示窗口内容等。见p127。,11,10.5主要容器类,importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassMyFrameextendsJFramepublicMyFrame(Stringstr)super(str);/调用父类的构造方法setSize(200,200);/设置JFrame的大小,Containerc=getContentPane();/加一个内容面板c.setBackground(Color.red);/设置面板的背景色为红色setVisible(true);/设置JFrame为可见,publicstaticvoidmain(Stringargs)MyFramefr=newMyFrame(HelloOutthere);,12,面板-JPanel类,JPanel类也是Java中常用到的容器之一,JPanel除了可以让组件加入外,还可以将JPanel作为组件加入到JFrame中去。Panel是一个轻量级的容器,它必须放到其它的容器中才能使用,本例中是放到Frame中,红色区域是Frame,黄色区域是Panel,Panel没有边框、Title和窗口按钮。Panel一般用于构建复杂页面。JPanel中同样有很多方法:如setSize()方法设置面板的大小,add(bt)向面板中添加组件,setVisible(true)方法设置面板为可见的等。见p127。,13,标签-JLabel类,JLabel类是专门用于显示输出的,它的功能为显示一串“只读文字”。JLabel的常用方法有:setText(Stringlabel)设置要显示的字符串,getText()返回当前显示的字符串,setAlignment(intalignment)设置对齐方式等。见p125,14,按钮-JButton类,JButton是最常用的组件之一,其主要功能是用来获得用户的输入,因为按钮包含了一个“标签”,所以也可以当作输出组件来用。JButton类可产生ActionEvent事件。JButton类的方法见p126。注意它的构造方法有四个,分别可以创建有标题,无标题、有图标、有图标有标题的按钮。见第7页的例子,15,文本框-JTextField,JTextField只能输入单行的文本.主要方法有:setText(Stringtext);getText();addActionListener(ActionListenerlistner)见第7页的例子,16,2.布局管理器,每个容器都有自己的布局管理器,用来对容器内的组件进行定位、设置大小和排列顺序等。容器可以通过选择不同的布局管理器来决定布局。布局管理器主要包括:FlowLayout、BorderLayout、GridLayout、CardLayout和GridBagLayout。,17,在程序中安排组件的位置和大小时,应该注意以下两点:容器中的布局管理器负责各个组件的大小和位置,因此用户无法在这种情况下设置组件的这些属性。如果试图使用Java语言提供的setLocation()、setSize()、setBounds()等方法,则都会被布局管理器覆盖。如果用户确实需要亲自设置组件大小或位置,则应取消该容器的布局管理器,方法为setLayout(null)。,18,布局管理器主要包括:FlowLayoutBorderLayoutGridLayoutCardLayoutGridBagLayout,19,BorderLayout类,BorderLayout类是一个布局管理器类,它是继承自Windows类的组件的默认布局管理器。BorderLayout布局管理器把容器分成5个区域:North,South,East,West和Center。,20,BorderLayout类,各个区域的位置及大小如下图所示:其变化规律为:组件的相对位置不变,大小发生变化。,21,BorderLayout类,publicstaticvoidmain(Stringargs)Framef=newFrame(BorderLayout);f.setLayout(newBorderLayout();f.add(North,newButton(North);/第一个参数表示把按钮添加到容器的North区域f.add(South,newButton(South);/第一个参数表示把按钮添加到容器的South区域f.add(East,newButton(East);/第一个参数表示把按钮添加到容器的East区域f.add(West,newButton(West);/第一个参数表示把按钮添加到容器的West区域f.add(Center,newButton(Center);/第一个参数表示把按钮添加到容器的Center区域f.setSize(200,200);f.setVisible(true);,22,FlowLayout类,FlowLayout布局管理器会将组件从左到右排列,再从上到下排列。它是继承自Panel类的组件的默认布局管理器。FlowLayout是Panel,Applet的缺省布局管理器。其规律是从上到下、从左到右进行放置。,23,FlowLayout类,publicstaticvoidmain(Stringargs)Framef=newFrame();f.setLayout(newFlowLayout();Buttonbutton1=newButton(Ok);Buttonbutton2=newButton(Open);Buttonbutton3=newButton(Close);f.add(button1);f.add(button2);f.add(button3);f.setSize(300,100);f.setVisible(true);,24,GridLayout类,GridLayout布局管理器将组件放在同样大小的晶格里。使容器中各个组件呈网格状布局,平均占据容器的空间。,25,GridLayout类,publicstaticvoidmain(Stringargs)Framef=newFrame(GridLayout);f.setLayout(newGridLayout(3,2);/容器平均分成3行2列共6格f.add(newButton(1);/添加到第一行的第一格f.add(newButton(2);/添加到第一行的下一格f.add(newButton(3);/添加到第二行的第一格f.add(newButton(4);/添加到第二行的下一格f.add(newButton(5);/添加到第三行的第一格f.add(newButton(6);/添加到第三行的下一格f.setSize(200,200);f.setVisible(true);f.setSize(200,200);f.setVisible(true);,26,在复杂的图形用户界面设计中,为了使布局更加易于管理,具有简洁的整体风格,一个包含了多个组件的容器本身也可以作为一个组件加到另一个容器中去,容器中再添加容器,这样就形成了容器的嵌套。,27,3.事件处理机制,在事件处理的过程中,会涉及3个重要概念。(1)事件:它是用户对界面操作在Java中的描述。事件对应Java中的类,例如键盘操作对应的事件是KeyEvent类,点击按钮对应的事件是ActionEvent类。(2)事件源:事件发生的媒质,通常指组件。常见的如Button组件等。(3)事件处理者:事件处理者也称作监听器。它是处理响应事件的对象。,28,很多情况下,一个事件源上可能发生多个事件。而Java的事件处理采用代理模式,即事件源可以把在其自身所有可能发生的事件分别授权给不同的事件处理者代理。事件处理者一直监听事件源上发生的事件,一旦发现是其代理的事件就马上进行处理。这也是事件处理者被称作监听器的原因。事件处理者(监听器)通常是一个类,该类如果要能够处理某种类型的事件,就必须实现与该事件类型相对的接口。所以JavaAWT事件处理模型将事件源和事件处理者完全分开。,29,publicclassTestButtonpublicstaticvoidmain(Stringargs)Framef=newFrame(Test);Buttonb=newButton(PressMe!);b.addActionListener(newButtonHandler();f.setLayout(newFlowLayout();f.add(b);f.setSize(200,100);f.setVisible(true);classButtonHandlerimplementsActionListenerpublicvoidactionPerformed(ActionEvente)System.out.println(Actionoccurred);,Button是事件源,事件,事件处理者(监听器),30,监听器,如果要接受并响应ActionEvent事件必须定义相应的事件处理者即监听器。某一个事件的监听器是一个类,该类需要实现与该事件相对应的ActionListener接口。每个事件都有与之对应的监听器接口。事件源实例化以后,需要添加该类事件的监听器,使用addActionListener(newButtonHandler)方法来注册监听器。在上面的例子中,ButtonHandler类作为ActionEvent事件的监听器实现了ActionListener接口中的方法actionPerformed(ActionEvente)。作为事件源的Button组件添加了ButtonHandler类作为其ActionEvent事件的监听器。,b.addActionListener(newButtonHandler();,31,事件,与AWT有关的所有事件类都继承自java.awt.AWTEvent类。AWTEvent是EventObject类的子类。AWT事件可以分为两大类即低级事件和高级事件。低级事件是指基于组件和容器的事件。例如:鼠标单击、鼠标经过等事件。高级事件是基于语义的事件,它依赖于事件源也就是组件类。例如:滑动滚动条会触发AdjustmentEvent事件,选中列表中的某一条会触发ItemEvent事件等。,32,事件,低级事件包括以下内容。(1)组件事件:ComponentEvent涉及组件大小的变化、移动等。(2)容器事件:ContainerEvent涉及组件增加、移动等。(3)窗口事件:WindowEvent涉及窗口关闭、图标变化等。(4)焦点事件:FocusEvent涉及焦点的获得和丢失。(5)键盘事件:KeyEvent涉及键的按下、释放等。(6)鼠标事件:MouseEvent涉及鼠标单击、移动等。高级事件包括以下内容。(1)动作事件:ActionEvent涉及按钮按下等。(2)调节事件:AdjustmentEvent涉及移动滚动条的滑块。(3)项目事件:ItemEvent涉及选择、选择变化等。(4)文本事件:TextEvent涉及文本对象的变化。,33,事件监听器接口,每类事件都有对应的事件监听器接口,接口中的方法必须在监听器类中实现。一旦该类事件发生,就会去调用这些方法。例如,与键盘事件KeyEvent相对应的接口是:,publicinterfaceKeyListenerextendsEventListenerpublicvoidkeyPressed(KeyEventev);publicvoidkeyReleased(KeyEventev);publicvoidkeyTyped(KeyEventev);,34,35,常用事件类,packagecode;importjava.awt.*;importjava.awt.event.*;publicclassKeyEventDemoimplementsKeyListenerpublicvoidkeyTyped(KeyEventargs0),36,publicvoidkeyPressed(KeyEventargs0)System.out.println();/获得事件源TextAreaarea=(TextArea)args0.getSource();/将TextArea组件中的文本转为大写Strings=area.getText().toUpperCase();/清空TextArea组件中的文本area.setText();/写入转为大写文本area.append(s);publicvoidkeyReleased(KeyEventargs0),37,publicstaticvoidmain(Stringargs)Frameframe=newFrame(容器);fram

温馨提示

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

评论

0/150

提交评论