AWT组件及事件处理(三)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第七章AWT组件及事件处理(三)本次课教学目标掌握文本区的事件处理方法掌握面板的使用熟悉各种布局方式,能根据实际需要选择合适的布局方式文本区上的TextEvent事件当改变文本区的内容时,发生TextEvent事件向文本区注册监视器:addTextListener(监视器)处理发生TextEvent事件的接口是TextListenerTextListener中只有一个方法:textValueChanged(TextEvente)例1:如下图所示,当在文本框中输入信息按回车时,将所输入内容显示在文本区2中;当在文本区1中输入信息时,文本区2中的字符跟随文本区1中的输入而变化。importjava.awt.*;importjava.awt.event.*;importjava.applet.*;publicclassUseTextEventextendsAppletimplementsActionListener,TextListener{TextFieldtf;TextAreata1,ta2;publicvoidinit(){tf=newTextField(25);ta1=newTextArea(4,25);ta2=newTextArea(4,25);tf.addActionListener(this);ta1.addTextListener(this);add(tf);add(ta1);add(ta2);}publicvoidactionPerformed(ActionEvente){if(e.getSource()==tf)ta2.setText(tf.getText());}publicvoidtextValueChanged(TextEvente){if(e.getSource()==ta1)ta2.setText(ta1.getText());}}面板面板(Panel):是最简单的容器类(Container的子类),程序可以在面板提供的空间里放置任意组件及其它的面板。Panel():使用默认的布局管理器创建一个新的面板。默认的布局管理器为FlowLayout。滚动面板(ScrollPane)也是Container的子类,但只能向滚动面板中添加一个组件。ScrollPane():创建滚动面板,滚动条初始不可见。ScrollPane(inta):用指定的参数创建一个滚动面板。a的取值为:Scrollpane.SCROLLBARS-ALWAYSScrollpane.SCROLLBARS-AS-NEEDEDScrollpane.SCROLLBARS-NEVER例2:程序的运行效果如下图所示。importjava.awt.*;importjava.awt.event.*;classMypanelextendsPanelimplementsActionListener{Buttonbutton1,button2;ColorbackColor;Mypanel(){button1=newButton(确定);button2=newButton(取消);add(button1);add(button2);setBackground(Color.pink);backColor=getBackground();button1.addActionListener(this);button2.addActionListener(this);}publicvoidactionPerformed(ActionEvente){if(e.getSource()==button1){setBackground(Color.cyan);}elseif(e.getSource()==button2){setBackground(backColor);}}}classWindowPanelextendsFrameimplementsActionListener{Mypanelpanel1;Panelp;ScrollPanescrollpane;Buttonbutton;WindowPanel(Strings){super(s);setLayout(newFlowLayout());panel1=newMypanel();p=newPanel();scrollpane=newScrollPane(ScrollPane.SCROLLBARS_ALWAYS);p.add(newButton(one));p.add(newButton(two));p.add(newButton(three));p.add(newButton(four));scrollpane.add(p);button=newButton(退出);add(panel1);add(scrollpane);add(button);button.addActionListener(this);setBounds(60,60,200,200);setVisible(true);validate();}滚动面板中只能放一个组件,所以先将4个按钮放面板中,再将面板放滚动面板中。publicvoidactionPerformed(ActionEvente){System.exit(0);}}publicclassUsePanel{publicstaticvoidmain(Stringargs[]){newWindowPanel(面板的使用);}}布局布局设计即控制组件在容器中的位置容器可以使用:setLayout(布局对象);来设置自己的布局。java.awt包中的布局类有:FlowLayoutBorderLayoutCardLayoutGridLayoutjava.swing.border包中的布局类有:BoxLayoutFlowLayout布局(按行/流式布局):是最简单的布局管理器,也是AWT中面板类采用的缺省布局方式。它的布局原则是将组件从左向右、从上向下排列,如果本行放不下这个组件,就放入下一行,每一行中的组件都居中对齐,组件之间的默认水平和垂直间隙是5个像素。其构造方法如下:FlowLayout():构建一个新的按行布局管理器,中央对齐,对象之间以默认的5个像素点水平和垂直间隔。FlowLayout(intalign):构建一个新的按行布局管理器,通过align设置对齐方式,对象之间以默认的5个像素点水平和垂直间隔。Align的值可为:FlowLayout.LEFTFlowLayout.CENTERFlowLayout.RIGHTFlowLayout(intalign,inthgap,intvgap):构建一个新的按行布局管理器,通过align设置对齐方式,对象之间以hgap单元水平间隔并以vgap单元垂直间隔。成员方法:setAlignment(intalign)//重新设置布局的对齐方式setHgap(inthgap)//重新设置布局的水平间隙setVgap(intvgap)//重新设置布局的垂直间隙例3:使用FlowLayout布局放置10个组件,要求组件左对齐,组件之间的水平间隔为2个像素,垂直间隔为8个像素。importjava.awt.*;classWindowFlowextendsFrame{WindowFlow(Strings){super(s);FlowLayoutflow=newFlowLayout(FlowLayout.LEFT,2,8);setLayout(flow);for(inti=1;i=10;i++){Buttonb=newButton(iam+i);add(b);}setBounds(100,100,250,200);setVisible(true);}}publicclassFlowLayoutDemo{publicstaticvoidmain(Stringargs[]){WindowFlowwin=newWindowFlow(FlowLayout布局窗口);}}BorderLayout布局(边界式布局):是Window型容器的默认布局,将一个容器分为北(NORTH)、南(SOUTH)、东(EAST)、西(WEST)和中央(CENTER)五部分。其构造方法如下:BorderLayout():构建一个新的边界式布局,对象之间没有间隔。BorderLayout(inthgap,intvgap):构建一个新的边界式布局,对象之间的水平间隔为hgap,垂直间隔为vgap。说明:要使用“边界式布局设置”时,必须先产生BorderLayout类的对象,再将此对象传给setLayout()方法,即可将容器设置为“边界式布局”。1、容器.setLayout(newBorderLayout());2、容器.add(BorderLayout.CENTER,组件1);或容器.add(组件1,BorderLayout.NORTH);或容器.add(“South”,组件1);在边界式布局中,每个区域只能放一个组件,该组件将占据整个区域。例4:实现上图的布局效果。importjava.awt.*;importjava.awt.event.*;importjava.applet.*;publicclassBorderDemoextendsApplet{publicvoidinit(){setFont(newFont(,Font.ITALIC,30));setLayout(newBorderLayout());add(North,newButton(北));add(South,newButton(南));add(West,newButton(西));add(East,newButton(东));add(Center,newButton(中));}}CardLayout(卡片式布局)将每个组件看作一张卡片,一个容器中可以加入多张卡片,但每次只有一个可见。也称“多层页面设置”,它把每一个组件都视为容器中的一层,每一个组件都会布满整个容器。这些组件都会赋予一个名称,然后再依这个名称来控制组件是否显示。假设有一个容器con,使用CardLayout的一般步骤:1、创建CardLayout布局对象如:CardLayoutcard=newCardLayout();2、使用setLayout()为容器设置布局如:con.setLayout(card);3、容器调用add(Strings,Componentb)方法添加组件,并给出了显示该组件的代号s(别名)。最先加入的为第1张,依次排序.4、该CardLayout对象调用下列方法可以显示组件:card.first(con);移到con的第一个组件;card.last(con);移到con的最后一个组件;card.next(con);移到当前显示组件的下一个组件;card.previous(con);移到当前显示组件的前一个组件;card.show(con,s);显示指定的组件。例5:一个使用CardLayout的简单例子,单击其上的按钮,在图中的两个画面间转换。importjava.awt.*;importjava.awt.event.*;importjava.applet.*;publicclassCardDemoextendsAppletimplementsActionListener{Buttonb1=newButton(显示第二张卡片);Buttonb2=newButton(显示第一张卡片);Panelp1=newPanel();Panelp2=newPanel();CardLayoutcl=newCardLayout();publicvoidinit(){setLayout(cl);add(card1,p1);//p1为第一张卡片add(card2,p2);//p2为第二张卡片p1.add(newLabel(第一张卡片));p1.add

1 / 32
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功