您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > java图形用户界面-java教程(精)
第5章图形用户界面5.1文本框和文本区5.2标签5.3按钮5.4选择框5.5画布5.6面板与布局设计5.7窗口5.8菜单5.9对话框5.1文本框和文本区5.1.1文本框及处理事件1.文本框的创建2.文本框处理事件例5-2:两个空白文本框,当在第一个文本框内输入字符时,在文本框内显示“*”号,输入完毕按回车键后,在第二个文本框内显示:Theend。importjava.awt.*;importjava.applet.Applet;importjava.awt.event.*;publicclassEx6_2extendsApplet{TextFieldtf1=newTextField(20);TextFieldtf2=newTextField(20);publicvoidinit(){add(tf1);tf1.setEchoChar('*');add(tf2);tf1Listeneral=newtf1Listener();tf1.addActionListener(a1);}classtf1ListenerimplementsActionListener{publicvoidactionPerformed(ActionEvente){tf2.setText(Theend);}}}运行结果见图5-2。图5-15.1.2文本区及处理事件例5-4:在Applet中添加一个文本框和一个文本区,每当在文本框中输入一个字符时,在文本区内就附加一行文本:Thetextischanged。importjava.awt.*;importjava.applet.Applet;importjava.awt.event.*;publicclassEx6_4extendsApplet{TextFieldtf1=newTextField(20);TextAreata1=newTextArea(null,6,40);publicvoidinit(){add(tf1);add(ta1);tf1.addTextListener(newTextL());}classTextLimplementsTextListener{publicvoidtextValueChanged(TextEvente){ta1.append(\nThetextischanged);}}}运行结果见图5-4。图5-45.2标签标签(Label)是AWT构件中最简单的一种构件,所谓标签实质上就是一段文字,但它与文字不同的是它是一个对象,所以在每次repaint时,不用重新添加。标签在GUI界面中通常作为提示信息使用。标签构件的构造方法如下。(1)Label()构造一个空的标签。(2)Label(Stringstr)构造一个以Stringstr为内容的标签。(3)Label(Stringstr,intalign)定义一个以Stringstr为内容的标签。5.3按钮5.3.1按钮按钮(Button)是GUI用户界面中常用的元素,它是用户输入命令的一个重要工具。当用鼠标单击某个按钮该按钮获得焦点时,在键盘上按回车键都会导致一个命令的执行。Button类有两种构造方法。(1)Button()构造一个没有标签的按钮。(2)Button(Stringstr)构造一个以Stringstr为标签的按钮。5.3.2按钮处理事件与按钮有关的事件有两类。1.ActionEvent当用鼠标单击按钮,或当按钮获得焦点时在键盘上按回车键都导致该事件的发生,此时任何实现了被注册为监听者的ActionListener接口的类,它的actionPerformed()方法将被调用。下面的程序范例在Applet上添加两个命令按钮,其标签分别为“显示”和“清除”,当单击“显示”按钮时,在文本区中显示:“你按下了显示按钮”,当按“清除”按钮时则清除文本区中显示的字符。例5-6:文本区事件处理。importjava.awt.*;importjava.applet.Applet;importjava.awt.event.*;publicclassEx6_6extendsApplet{Buttonb1=newButton(显示);Buttonb2=newButton(清除);TextAreata1=newTextArea(null,6,40);publicvoidinit(){add(b1);add(b2);add(ta1);b1.addActionListener(newButtenL());b2.addActionListener(newButtenL());}classButtenLimplementsActionListener{publicvoidactionPerformed(ActionEvente){if(e.getSource()==b1)ta1.append(\n你按下了显示按钮);elseta1.append(\n你按下了清除按钮);}}}运行结果见图5-6。图5-62.FocusEventFocusEvent称作焦点事件,它的发生是指键盘光标移动到构件上并且可以接受键盘的输入。如果光标移动到一个按钮上,称作该按钮获得焦点,反之称作失去焦点。当一个按钮获得焦点时单击回车键即相当于用鼠标单击该按钮。如果一个文本框获得焦点就可以在该文本框中输入字符。例5-7:按钮和文本框检测焦点事件的例子。程序如下:importjava.awt.*;importjava.applet.Applet;importjava.awt.event.*;publicclassEx6_7extendsApplet{TextFieldtxt1=newTextField(txt1,50);TextFieldtxt2=newTextField(txt2,50);Buttonbutton1=newButton(button1);Buttonbutton2=newButton(button2);classKeytryimplementsFocusListener{publicvoidfocusGained(FocusEvente){txt1.setText(txt1:paramString()=+e.paramString());if(e.getSource()==txt1)txt2.setText(txt2:focusisontxt1);elsetxt2.setText(txt2:focusisonbutton1);}publicvoidfocusLost(FocusEvente){txt1.setText(txt1:paramString()=+e.paramString());txt2.setText(txt2:focuslostoutsidebutton1ortxt1);}}Keytryal=newKeytry();publicvoidinit(){setLayout(newFlowLayout());txt1.addFocusListener(al);button1.addFocusListener(al);add(button1);add(button2);add(txt1);add(txt2);}}运行结果见图5-7。图5-7在上面的例子中,只有button1和txt1注册了焦点事件的事件监听者,它们共享同一个事件处理程序。如果焦点在button1或txt1上面,文本框txt2显示焦点在哪个构件上(focusGaned),反之则指出无焦点(focusLost)。文本框txt1内显示事件的参数字符串,它也能指出是否有焦点。另外,程序中的setLayout(newFlowLayout())语句是控制构件的布局用的,关于这个问题将在后面的章节中进行讨论。5.4选择框5.4.1选择框1.下拉列表框(Choice)2.列表框(List)3.复选框(Checkbox)4.单选框(Checkboxgroup-RadioButton)5.4.2选择框处理事件例5-12:选择框检测ItemEvent事件的例子。importjava.awt.*;importjava.applet.Applet;importjava.awt.event.*;publicclassEx6_12extendsAppletimplementsItemListener{TextAreata1=newTextArea(null,6,40);Stringsubject[]={语文,数学,政治,外语,物理,化学};Checkboxcb[]=newCheckbox[6];publicvoidinit(){add(newLabel(请选择:));for(intI=0;I6;I++){cb[I]=newCheckbox(subject[I]);add(cb[I]);cb[I].addItemListener(this);}add(ta1);}publicvoiditemStateChanged(ItemEvente){ta1.append(\n你在复选框中的选择是:+e.getItem());}}运行结果见图5-12。图5-125.5画布例5-13:创建一个画布。importjava.awt.*;importjava.applet.Applet;importjava.util.*;publicclassmycanvasextendsApplet{publicvoidinit(){MyCanvas1mc=newMyCanvas1();mc.setBackground(Color.green);mc.setSize(150,150);add(mc);}}classMyCanvas1extendsCanvas{publicvoidpaint(Graphicsg){g.fillOval(40,20,80,80);}}运行结果见图5-13。图5-135.6面板与布局设计5.6.1布局管理器1.FlowLayout类2.BorderLayout类例5-15:边界布局使用实例。importjava.awt.*;importjava.applet.Applet;publicclassEx6_15extendsApplet{publicvoidinit(){setLayout(newBorderLayout(0,0));add(newButton(North),BorderLayout.NORTH);add(newButton(South),BorderLayout.SOUTH);add(newButton(East),BorderLayout.EAST);add(newButton(West),BorderLayout.WEST);add(newButton(Center),BorderLayout.CENTER);}}运行结果见图5-15。图5-153.GridLayout类4.布局设计中的绝对定位5.6.2面板面板(Panel)是一个容器类,它可以包含其他的构件或另外的面板,并且可以使用布局管理器对其内部的构件进行管理。其实Aapplet本身就是面板的一个子类,它就是一个特殊的面板。面板缺省的布局方式是FlowLayout。面板的构造方法如下。(1)Panel()用缺省布局方式(FlowLayout)创建一个面板。(2)Panel(LayoutManagerlayout)用指定布局方式创建一个面板。面板的常用方法如下。(1)publicvoidadd(Componentcomp)为容器添加一个构件。(2)publicvoidremove(Componentcomp)为容器去除一个构件。(3)publicvoidsetSize(intwidth,intheight)为容器设定宽和高。(4)publicvoidsetFont(Fontf)为容器设定字体。(5)publicvoidsetLocation(intx,inty)设定定坐标位置。(6)publicv
本文标题:java图形用户界面-java教程(精)
链接地址:https://www.777doc.com/doc-4724585 .html