第十一章图形用户界面一、Java的图形用户界面awt包AWT包提供的类大致上可以归纳成4大类:图形界面组件,如:窗口、按钮、菜单等。2D图形绘制组件,如:直线、圆形。布局对象:用来安排图形界面组件的位置。事件处理对象,用来处理图形界面组件所触发的事件。awt包组件Java.lang.ObjectMenuComponentComponentMenuBarMenuItemContainerLabelButtonTextComponentCheckBoxMenuWindowPanelFrameDialogFileDialogTextFieldTextArea屏幕坐标位置缺省状态下原点的位置为屏幕左上角位置(0,0)。x坐标是从左向右移动的水平距离,y坐标是从上向下移动的垂直距离。(0,0)X坐标轴Y坐标轴建立窗口Frame类的操作创建窗口的基本和必要操作包括以下方面:(1)可以设置窗口的大小。(2)给窗口一个标题。(3)在屏幕的某个位置放置窗口。(4)显示窗口。(5)关闭窗口。Java实例——建立窗口importjava.awt.*;classWindow1{staticFramefra=newFrame(这是一个窗口程序);//创建一个窗口对象fra并设置窗口标题为这是一个窗口程序publicstaticvoidmain(Stringargs[]){fra.setBounds(0,0,300,200);//继承Component类的方法,设置窗口大小并将窗口放置在屏幕的某个位置fra.setResizable(false);//设置窗口尺寸不可以改fra.setState(fra.NORMAL);//设置窗口为标准状态fra.show();//继承Window类的show()方法,在屏幕上显示窗口}}Frame类的方法Frame类的构造方法主要功能Frame()创建没有标题的窗口Frame(Stringtitle)创建以title为标题的窗口Frame类的方法主要功能IntgetState()获得Frame窗口的状态(Frame.Normal表示一般状态,Frame.ICONIFIED表示最小化状态)voidsetState(intstate)设置Frame窗口的状态(Frame.Normal表示一般状态,Frame.ICONIFIED表示最小化状态)StringgetTitle()获得Frame窗口的标题voidsetTitle(Stringtitle)设置Frame窗口的标题booleanisResizable()测试Frame窗口是否可以改变大小voidsetResizable(booleanr)设置Frame窗口是否可以改变大小ImagegetIconImage()返回窗口的最小化图标voidsetIconImage(Imageimg)设置窗口的最小化图标为img标签组件标签是用来在窗口中显示文字的组件。它是由java.awt类库中的Label类来创建。通过getText()方法获得标签所显示的文字;通过setText()方法可以改变标签内的文字。Label类的方法Label类的构造方法主要功能Label()创建一个没有文字的标签Label(Stringstr)创建一个以str为文字的标签Label(Stringstr,intalign)创建一个以str为文字的标签,并以align为对齐方式,其中Label.LEFT、Label.CENTER、Label.RIGHT分别为居左、居中和居右Label类的方法主要功能IntgetAlignment()返回标签内文字的对齐方式VoidsetAlignment(intalign)设置标签内文字的对齐方式StringgetText()获得标签内的文字VoidsetText(Stringtext)设置标签内的文字Java实例——建立标签importjava.awt.*;classLabel1{publicstaticvoidmain(Stringargs[]){Framefra=newFrame(这是创建标签的程序);Labelbl=newLabel();//创建一个空标签fra.setBounds(0,0,300,200);bl.setText(欢迎使用Java语言);//为标签添加文字bl.setAlignment(Label.CENTER);bl.setBackground(Color.blue);bl.setForeground(Color.red);fra.add(bl);fra.setVisible(true);}}按钮组件按钮提供用户快速启动某一动作的方法。通常用户在使用鼠标或键盘按下按钮时,计算机会产生一系列的动作,完成一定的操作。Button类的方法Button类的构造方法主要功能Button()创建一个没有标题的按钮Button(Stringstr)创建一个以str为标题的按钮Button类的方法主要功能StringgetLabel()获得按钮的标题VoidsetLabel(Stringstr)设置按钮的标题为strJava实例——建立按钮importjava.awt.*;classBut2{publicstaticvoidmain(Stringargs[]){Framefra=newFrame(创建按钮程序);Buttonbut=newButton(pushme);fra.setBounds(0,0,300,200);fra.setLayout(null);//关闭页面设置but.setBounds(50,50,100,50);//设置按钮的大小fra.add(but);fra.setVisible(true);}}文本框文本框是用来在窗口中显示文字的矩形框,这些文字可以被用户编辑。文本框可以用来输入文字、编辑文字、并显示这些的文字内容。TextField类的方法TextField类的构造方法主要功能TextField()创建一个空的文本框TextField(intcolumns)创建一个空的文本框,具有指定列数TextField(Stringtext)创建一个包含有指定“text”内容文本框TextField(Stringtext,intculumns)创建一个包含有指定列数和“text”内容的文本框TextField类的方法主要功能StringgetText()获得文本框的内容intgetColumns()获得文本框的列数voidsetText(Stringtext)设置文本框的内容为textvoidsetColumns(intcolumns)设置文本框的列数Java实例——建立文本框importjava.awt.*;classText{publicstaticvoidmain(Stringargs[]){Framefra=newFrame(创建文本框程序);TextFieldtxt1=newTextField(50);TextFieldtxt2=newTextField(50);fra.setBounds(0,0,300,200);fra.setLayout(null);txt1.setBounds(50,50,130,20);txt2.setBounds(50,70,130,20);fra.add(txt1);fra.add(txt2);fra.setVisible(true);}}字体在java中,各种文字都是以图形的方式输出,所以可以通过使用Font类和FontMetrics类的方法设置字型、字体大小等,输出通过Graphics类提供的输出方法输出文字内容。Font类的方法Font类的构造方法主要功能Font(Stringfontname,intstyle,intsize)创建的字体名称为fontname、style为字体样式、size为字体大小。Font类的方法主要功能Fontdecode(Stringstr)获得字符串所描述的字体StringgetFontName()获得字体名称intgetStyle()获得字体的样式intgetSize()获得字体的大小尺寸booleanisPlain()测试字体是否是正常体booleanisItalic()测试字体是否是斜体StringtoString()将此对象转换为字符串表示FontMetrics类的方法FontMetrics类的构造方法主要功能FontMetrics(Fontfont)创建一个FontMetrics类的对象。FontMetrics类的方法主要功能FontgetFont(r)获得当前字体intgetLeading()获得字体的Leading(字冠)值intgetAscent()获得字体的Ascent(上差)值intgetDecent()获得字体的Decent(下差)值intgetHeight()获得字体的Height(高度)值StringtoString()返回对象的字符串表示Graphics类的方法使用Graphics类设置字体的方法:setFont(Fontmyfont);使用Graphics类中定义的方法在屏幕上输出设置好字体的文字内容。下面是输出字符或字符串内容的Graphics类方法Graphics类的方法主要功能drawString(Stringstr,intx,inty)以x,y为起始位置,用当前的颜色和字体绘制str字符串内容drawChars(char[]ch,intoffset,intnumber,intx,inty)从字符数组ch的第offset位置的字符开始(offset为数组下标)总共截取number个字符;以x,y为坐标的起始位置,用当前的颜色和字体绘制number个字符drawBytes(byte[]bt,intoffset,intnumber,intx,inty)从字节数组bt的第offset位置的字节开始(offset为数组下标)总共截取number个字符;以x,y为坐标的起始位置,用当前的颜色和字体绘制number个字符Java实例——设置字体importjava.awt.*;publicclassFontsextendsFrame{publicFonts(){super(设置字体程序);setSize(420,125);show();}publicvoidpaint(Graphicsg){g.setFont(newFont(Serif,Font.BOLD,12));g.drawString(Serif12pointbold.,20,50);g.setFont(newFont(Monospaced,Font.ITALIC,24));g.drawString(Monospaced24pointitalic.,20,70);g.setFont(newFont(SansSerif,Font.PLAIN,14));g.drawString(SansSerif14pointplain.,20,90);g.setColor(Color.red);g.setFont(newFont(Serif,Font.BOLD+Font.ITALIC,18));g.drawString(g.getFont().getName()++g.getFont().getSize()+pointbolditalic.,20,110);}publicstaticvoidmain(Stringargs[]){Fontsapp=newFonts();}}二、Java语言中的事件处理当用户在图形用户界面中对特定图形界面元素单击、双击鼠标或单击键盘等操作时,通常会引发一个系统预先定义好的事件,用户只需编写程序代码对特定事件发生时做出何种响应即可。概念在对事件进行处理时,它是采用一种委托事件模型的形式。它的含义是将事件的处理委托给独立的对象,这样使得用户界面与程序逻辑分开,整个“委托事件模型”由产生事件的对象、事件对象和监听者对象之间的关系所组成。产生事件的对象会在事件产生时