第6章回顾Applet.ppt

上传人:sccc 文档编号:4750067 上传时间:2023-05-13 格式:PPT 页数:99 大小:532.52KB
返回 下载 相关 举报
第6章回顾Applet.ppt_第1页
第1页 / 共99页
第6章回顾Applet.ppt_第2页
第2页 / 共99页
第6章回顾Applet.ppt_第3页
第3页 / 共99页
第6章回顾Applet.ppt_第4页
第4页 / 共99页
第6章回顾Applet.ppt_第5页
第5页 / 共99页
点击查看更多>>
资源描述

《第6章回顾Applet.ppt》由会员分享,可在线阅读,更多相关《第6章回顾Applet.ppt(99页珍藏版)》请在三一办公上搜索。

1、第6章回顾 Applet,Java Applet也称为小应用程序,嵌入在网页中运行,Applet方法,init()-完成对Applet实例的初始化,repaint()-update(g)-paint(g),drawString(String s,int x,int y)drawLine(int x1,int y1,int x2,int y2)drawImage(4个参数),如何从html文件将参数传递给applet?,第7章 图形用户界面的设计与实现,7.1 图形用户界面核心概念7.2 容器与布局管理7.3 常用GUI标准组件7.4 鼠标和键盘事件7.5 菜单的使用7.6 对话框的使用,图形用

2、户界面核心概念,容器-可以容纳GUI部件(按某种布局)-窗体、面板,部件-部署在容器中,实现某种交互。-文本框、按纽、标签等,GUI部件,图形用户界面核心概念-创建窗体,Frame f=new Frame(“标题“),class MyFrame extends Frame.Frame f=new MyFrame(“标题“),图形用户界面核心概念,创建文本框、按钮、标签TextField x=new TextField(10);Button b=new Button(“ok”);Label dis=new Label(“hint”);,图形用户界面核心概念 给容器中加入部件,布局设置setLay

3、out(new FlowLayout(),加入部件 add(部件对象1);add(部件对象2);.,图形用户界面核心概念,事件处理-委托事件处理模型,事件源-发生事件,事件监听者-处理事件-符合相应接口要求,事件委托处理图,委托事件处理-过程,(1)给事件源对象注册监听者 button.addActionListener(ActionListener a);,(2)给监听者编写事件处理代码 public void actionPerformed(ActionEvent e),(1)事件源对象的容器类作为监听者 addActionListener(this);,(2)用内嵌类实现 addActi

4、onListener(new Process();,监听者事件处理编程-要设法在actionPerformed中能访问事件处理相关对象,(3)用匿名内嵌类实现 addActionListener(new ActionListener().);,图形用户界面核心概念,getSource()用来获取事件源对象。,getActionCommand()结果为字符串,用来获取按钮事件对象的命令名,在事件处理代码中区分事件源-ActionEvent提供方法,演练例子,编写一个程序改变Applet背景的颜色 在Applet中安排一个按钮,每次点击按钮随机换一种新颜色。,布局管理,FlowLayout(流式布

5、局)BorderLayout(边缘或方位布局)GridLayout(网格布局)CardLayout(卡片式布局)GridBagLayout(网格块布局),布局管理-FlowLayout(流式布局),从上到下、左到右排放,放不下再换至下一行-不会改变控件的大小。,按照参数要求安排部件间的纵横间隔和对齐方式,public FlowLayout()居中对齐方式,组件纵横间隔5个像素。public FlowLayout(int align,int hgap,int vgap)3个参数分别指定对齐方式、纵、横间距 public FlowLayout(int align)参数规定对齐方式,组件纵横间距默认

6、5个像素。,布局管理-BorderLayout(边缘或方位布局),将容器内部空间分为东(East)、南(South)、西(West)、北(North)、中(Center)五个区域,布局管理-BorderLayout(边缘或方位布局),控件的大小随容器大小改变。,按照参数要求安排部件间的纵横间隔和对齐方式,public BorderLayout()各组件之间的纵横间距为0 public BorderLayout(int hgap,int vgap)2个参数分别指定纵、横间距,加入组件add(方位名字符串,组件),布局管理-GridLayout布局,把容器的空间分为若干行乘若干列的网格区域 组件按

7、从左向右,从上到下的次序被加到各单元格中 组件的大小将调整为与单元格大小相同。,布局管理-GridLayout构造方法,public GridLayout()所有组件在一行中。public GridLayout(int rows,int cols)通过参数指定布局的行和列数。public GridLayout(int rows,int cols,int hgaps,int vgaps)指定划分的行列数以及组件间的水平和垂直间距。,GridLayout布局加入组件,add(组件名),public void init()this.setLayout(new GridLayout(3,3,10,10

8、);for(int i=1;i=9;i+)this.add(new Button(Button#+i);,布局管理-CardLayout布局,加入的部件叠成卡片的形式,构造方法 public CardLayout()显示组件将占满整个容器,不留边界。public CardLayout(int hgap,int vgap)容器边界分别留出水平和垂直间隔,组件占中央。,组件加入 add(字符串,组件名)其中,字符串用来标识卡片名称。,CardLayout布局-卡片翻动,show(容器,字符串):显示指定名称的卡片 first(容器):显示第一块卡片 last(容器):显示最后一块卡片 next(容

9、器):显示下一块卡片,Component类(抽象类),Color getBackground():获取部件的背景色 Font getFont():获取部件的显示字体 Graphics getGraphics():获取部件的Graphics属性对象 void repaint(int x,int y,int width,int height):对部件的特定区域进行重新绘图 void setBackground(Color c):设置部件的背景 void setEnabled(boolean b):是否让部件功能有效,在无效情况下部件变灰 void setFont(Font f):设置部件的显示字体

10、 void setSize(int width,int height):设置部件的大小 void setVisible(boolean b):设置部件是否可见 void setForeground(Color c):设置部件的前景色 void requestFocus():让部件得到焦点 void add(PopupMenu popup):给部件加入弹出菜单,文本框(TextField),文本框只能编辑一行数据,构造方法有四种:TextField():构造一个单行文本输入框。TextField(int):指定长度的单行文本输入框。TextField(String):指定初始内容的单行文本输入框

11、。TextField(String,int):指定长度、指定初始内容。,常用方法:setEchoChar(*)设置回显字符 getText():获取输入框中的数据 setText():往输入框写入数据 isEditable():判断输入框是否可编辑。,文本框(TextField)-事件,ActionEvent事件-在文本框按回车键时引发 注册:addActionListener();接口:ActionListener 方法:public void actionPerformed(ActionEvent e),TextEvent事件-对文本输入部件数据更改操作(添加、修改、删除)注册:addTe

12、xtListener()接口:TextListener方法:public void textValueChanged(TextEvent e),文本域(TextArea),特点1:可以编辑多行文字,构造方法有四种:TextArea():构造一个文本域。TextArea(int,int):构造一个指定长度和宽度的文本域。TextArea(String):构造一个显示指定文字的文本域。TextArea(String,int,int):按指定长度、宽度和默认值构造多行文本域。,特点2:在已有内容的基础上补充新数据append(String s):将字符串添加到文本域的末尾 insert(String

13、 s,int index):将字符串插入到文本域的指定位置,1.选择事件(ItemEvent)类,public ItemSelectable getItemSelectable()public Object getItem()public int getStateChange()返回值:ItemEvent.SELECTED:代表选项被选中。ItemEvent.DESELECTED:代表选项被放弃不选。,2复选按钮(Checkbox),举例:Checkbox backg=new Checkbox(背景色);常用方法 boolean getState():获取复选按钮的选中状态,返回true代表按

14、钮被选中 void setState(boolean value):设置复选按钮的状态,vlaue为true表示选中。事件响应 itemStateChanged(ItemEvent e)方法通过 e.getItemSelectable()获得事件源对象引用调用 getState()获取事件 源对象的状态。,例7-11 一个简单的多选题练习程序,例7-11 一个简单的多选题练习程序,import java.awt.*;import java.applet.*;import java.awt.event.*;public class FuXuan extends Applet implements

15、 ActionListener String question=Java test question1n A.choice1n B.choice2n C.choice3,Java test question2n A.goodn B.badn C.luck;String ch=A,B,C;String answer=AB,BC;Checkbox cb=new Checkbox3;Label hint;TextArea content;int bh=0;Button ok,next,previous;,public void init()setLayout(new BorderLayout();c

16、ontent=new TextArea(10,50);add(Center,content);content.setText(questionbh);Panel p=new Panel();p.setLayout(new GridLayout(2,1);Panel p1=new Panel();for(int i=0;ich.length;i+)cbi=new Checkbox(chi);p1.add(cbi);,p.add(p1);Panel p2=new Panel();ok=new Button(确定);p2.add(ok);hint=new Label(对错提示);p2.add(hin

17、t);next=new Button(下一题);p2.add(next);previous=new Button(上一题);p2.add(previous);p.add(p2);add(South,p);next.addActionListener(this);previous.addActionListener(this);ok.addActionListener(this);,public void actionPerformed(ActionEvent e)if(e.getSource()=ok)String s=;for(int i=0;ich.length;i+)if(cbi.get

18、State()s=s+cbi.getLabel();if(s.equals(answerbh)hint.setText(对);else hint.setText(错);,例7-11(续4)解答判定,else if(e.getSource()=next)if(bh0)bh-;content.setText(questionbh);,例7-11(续5)/翻动试题,3.单选按钮(CheckBoxGroup),使用复选框组,可以实现单选框的功能。例如:CheckboxGroup style=new CheckboxGroup();Checkbox p=new Checkbox(普通,true,styl

19、e);Checkbox b=new Checkbox(黑体,false,style);Checkbox i=new Checkbox(斜体,false,style);【注意】把CheckboxGroup加入容器时必须将每个Checkbox对象逐一加入容器,不能使用CheckboxGroup对象一次性加入。,将按钮组合,事件编程处理,每个单选按钮要单独注册监听者在事件处理代码中通过CheckboxGroup的对象的getSelectCheckbox()方法可获取当前被选中的选项按钮对象,要设置选项按钮i为选中状态可通过方法setSelectedCheckbox(i)。选项按钮的其他方法:getL

20、abel()方法可获取选项按钮的标识getState()可判选项按钮对象是否选中。setState()设置某个单选按钮为选中状态。,例7-12 用单选按钮控制画笔的颜色,import java.awt.*;import java.applet.*;import java.awt.event.*;public class ChangeColor extends Applet implements ItemListener String des=红色,兰色,绿色,白色,灰色;Color c=Color.red,Color.blue,Color.green,Color.white,Color.gra

21、y;Color drawColor=Color.black;,public void init()CheckboxGroup style=new CheckboxGroup();for(int i=0;ides.length;i+)Checkbox one=new Checkbox(desi,false,style);one.addItemListener(this);add(one);,/*根据drawColor的颜色绘制文字*/,public void paint(Graphics g)g.setColor(drawColor);g.setFont(new Font(变色字,Font.BO

22、LD,24);g.drawString(变色字,80,80);,根据选择的按钮设置drawColor的颜色值,public void itemStateChanged(ItemEvent e)Checkbox temp=(Checkbox)e.getItemSelectable();for(int i=0;ides.length;i+)if(temp.getLabel()=desi)drawColor=ci;repaint();break;,4下拉列表(Choice),“多选一”控件 下拉列表是作为一个整体加入到容器,各个列表元素不是独立的操作对象。下拉列表也是产生ItemEvent类的选择事

23、件对下拉列表的选项值的判定处理有两种方法可供选择:一种是根据选项在列表中的序号,即通过getSelectedIndex()方法;另一种是通过getSelectItem()方法获取列表项对应的字符串。,相关方法:,select(int index)和select(String item):强制将某列表项定为选中状态;add(String item)和insert(String item,int index):添加新元素到列表中remove(int index)和 remove(String item):删除某个列表元素removeAll():删除所有元素。,例7-13 用下拉列表控制Applet

24、的背景变化,import java.awt.*;import java.applet.*;import java.awt.event.*;public class ChangeColor2 extends Applet implements ItemListener String des=红色,兰色,绿色,白色,灰色;Color c=Color.red,Color.blue,Color.green,Color.white,Color.gray;public void init()Choice color=new Choice();for(int i=0;ides.length;i+)color

25、.add(desi);color.addItemListener(this);add(color);,例7-13(续),public void itemStateChanged(ItemEvent e)Choice temp=(Choice)e.getItemSelectable();for(int i=0;ides.length;i+)if(temp.getSelectedIndex()=i)setBackground(ci);break;,5.列表(List),列表与下拉列表的区别有两点:一是列表可以在屏幕上看到一定数目的选择项,而下拉列表只能看到一项;另一点用户可能允许同时选择列表中的多

26、项,而下拉列表只能选一项。MyList=new List(4,true);给列表添加选项用add方法下拉列表的方法均可用于列表对象,另外,由于列表支持多选,因此,列表中还提供有getSelectItems()方法和getSelectedIndexs()方法,它们返回的均是数组,分别代表哪些选中的选项的字符串和序号。,列表可以产生两类事件:,ItemEvent类选择事件,当单击某选项时触发。ActionEvent类动作事件。当双击某选项触发。值得注意的是,双击事件不能覆盖单击事件,当用户双击一个选项时,首先产生双击、然后产生单击。,例7-14 假设有一个发文系统,需要将一份文件发给多个单位,im

27、port java.applet.*;import java.awt.*;import java.awt.event.*;public class TestList extends Applet implements ActionListener,ItemListener List myList;Label result;String unit=总务处,教务处,工会,科研处,信息学院,机械学院;,public void init()myList=new List(5,true);for(int i=0;iunit.length;i+)myList.add(uniti);add(myList);

28、myList.addActionListener(this);myList.addItemListener(this);,/*响应动作事件*/,public void actionPerformed(ActionEvent e)if(e.getSource()=myList)showStatus(您双击了选项+e.getActionCommand();,/*响应选择事件*/,public void itemStateChanged(ItemEvent e)String sList;String str=;List temp=(List)(e.getItemSelectable();sList=

29、temp.getSelectedItems();for(int i=0;isList.length;i+)str=str+sListi+;showStatus(您选择了选项:+str);,1、创建滚动条,滚动条按方向分垂直和水平两种。例如,以下代码创建一个水平滚动条:Scrollbar mySlider=new Scrollbar(Scrollbar.HORIZONTAL,0,1,0,255);有关说明:(1)第1个参数为常量,代表水平滚动条,如果是垂直滚动条,则为Scrollbar.VERTICAL;(2)第2个参数代表为初始值;(3)第3个参数代表滚动条的滑块长度;(4)第4、5个参数分别

30、代表滚动条的最小和最大值,由于滚动条滑块要占一定宽度,所以滚动条的实际最大值=最大值-滑块长度。,2、滚动条的事件处理,AdjustmentEvent(调整值变化事件)是在滚动条滑块移动时引发。在滚动条上可通过多种操作来改变其滑块位置,例如:用户可以拖动滚动条的滑块,点击块增量区或上、下三角按钮均会导致滑块的变化,而且移动的步长不同,按PageUp和PageDown键也相当于点击滚动条的块增量区使用addAdjustmentListener()方法给滚动条注册监听者,监听者要求实现AdjustmentListener接口,该接口中包含如下方法:public void adjustmentVal

31、ueChanged(AdjustmentEvent e),滚动条编程的要点是对滚动条所代表的值的获取与设置,如下方法分别用来获取和设置滚动条的当前值:public int getValue()public void setValue(int newValue)如下方法获取事件源和引起值变化的调整类型:Adjustable getAdjustable()返回引发状态变化的事件源对象。int getAdjustmentType()返回引发状态变化事件的调整类型,调整类型值可通过以下常量进行判断。,AdjustmentEvent.BLOCK_DECREMENT 点击下方引取下移 Adjustment

32、Event.BLOCK_INCREMENT 上移 AdjustmentEvent.TRACK 拖动滑块 AdjustmentEvent.UNIT_DECREMENT 点击下三角按钮 AdjustmentEvent.UNIT_INCREMENT 点了上三角按钮,设定和获取滚动条滑块的移动增量值,void setUnitIncrement(int)/指定单位增量 void setBlockIncrement(int)/指定块增量 int getUnitIncrement()/获取单位增量 int getBlockIncrement()/获取块增量,例7-15 利用滚动条设计一个调色控制板用来调整任

33、意部件的颜色,import java.applet.*;import java.awt.*;import java.awt.event.*;class colorBar extends Scrollbar public colorBar()super(Scrollbar.HORIZONTAL,0,40,0,295);this.setUnitIncrement(1);this.setBlockIncrement(50);,class ColorPanel extends Panel implements AdjustmentListener Scrollbar redSlider=new col

34、orBar();Scrollbar greenSlider=new colorBar();Scrollbar blueSlider=new colorBar();Canvas mycanvas=new Canvas();Color color;,public ColorPanel()Panel x=new Panel();x.setLayout(new GridLayout(3,2,1,1);x.add(new Label(red);x.add(redSlider);x.add(new Label(green);x.add(greenSlider);x.add(new Label(blue);

35、x.add(blueSlider);setLayout(new GridLayout(2,1,5,5);add(mycanvas);add(x);redSlider.addAdjustmentListener(this);greenSlider.addAdjustmentListener(this);blueSlider.addAdjustmentListener(this);,/*滚动条调整时,根据调整值改变画布的颜色*/public void adjustmentValueChanged(AdjustmentEvent e)int value1,value2,value3;value1=r

36、edSlider.getValue();value2=greenSlider.getValue();value3=blueSlider.getValue();color=new Color(value1,value2,value3);mycanvas.setBackground(color);,public class TestSlider extends Applet public void init()setLayout(new BorderLayout();add(Center,new ColorPanel();,鼠标事件,共有7种情形,用 MouseEvent类的同名静态整型常量标志,

37、分别是MOUSE_DRAGGEDMOUSE_ENTEREDMOUSE_EXITEDMOUSE_MOVED MOUSE_PRESSEDMOUSE_RELEASEDMOUSE_CLICKED,鼠标事件的处理接口,MouseListener 负责接收和处理鼠标的press(按下)、release(释放)、click(点击)、enter(移入)和exit(移出)动作触发的事件;MouseMotionListener 负责接收和处理鼠标的move(移动)和drag(拖动)动作触发的事件。,MouseEvent类,public int getX():返回发生鼠标事件的 X坐标。public int get

38、Y():返回发生鼠标事件的 Y坐标。public Point getPoint():返回 Point对象,也即鼠标事件发生的坐标点。public int getClickCount():返回鼠标点击事件的连击次数。,一个鼠标位置跟踪程序,在当前位置画红色小圆,import java.applet.Applet;import java.awt.*;import java.awt.event.*;public class extends Applet implements MouseMotionListener private static final int RADIUS=7;private i

39、nt posx=10,posy=10;public void init()addMouseMotionListener(this);,public void paint(Graphics g)/在鼠标位置画红色小圆 g.setColor(Color.red);g.fillOval(posx-RADIUS,posy-RADIUS,RADIUS*2,RADIUS*2);,一个鼠标位置跟踪程序,在当前位置画红色小圆(续1),/*对鼠标移动事件进行处理*/public void mouseMoved(MouseEvent event)posx=event.getX();posy=event.getY(

40、);repaint();public void mouseDragged(MouseEvent event),一个鼠标位置跟踪程序,在当前位置画红色小圆(续2),学生练习,编Applet在鼠标所到之处绘线。,键盘事件,包含 3个,分别对应 KeyEvent类的几个同名的静态整型常量KEY_PRESSED、KEY_RELEASED、KEY_TYPED。监听者接口是KeyListener public void keyPressed(KeyEvent e)某个键按下时执行。public void keyReleased(KeyEvent e)某键被释放时执行。public void keyType

41、d(KeyEvent e)按键被敲击。KeyTyped包含keyPressed和KeyRelased两个动作,如何获取击键值,getKeyChar()-获取输入字符(对字符键)getKeyCode()-获取键的编码(对控制键)键编码常量KeyEvent.VK_LEFT)-按键为左箭头KeyEvent.VK_RIGHT)-右箭头KeyEvent.VK_UP)-向上箭头 KeyEvent.VK_DOWN)-向下箭头,小方框变色和移动,import java.awt.*;import java.awt.event.*;import java.applet.Applet;public class Ke

42、yboardDemo extends Applet implements KeyListener static final int SQUARE_SIZE=20;Color squareColor;int squareTop,squareLeft;public void init()setBackground(Color.white);squareTop=getSize().height/2-SQUARE_SIZE/2;squareLeft=getSize().width/2-SQUARE_SIZE/2;squareColor=Color.red;addKeyListener(this);,p

43、ublic void paint(Graphics g)g.setColor(Color.cyan);int width=getSize().width;int height=getSize().height;g.drawRect(0,0,width-1,height-1);g.drawRect(1,1,width-3,height-3);g.drawRect(2,2,width-5,height-5);g.setColor(squareColor);g.fillRect(squareLeft,squareTop,SQUARE_SIZE,SQUARE_SIZE);,public void ke

44、yTyped(KeyEvent evt)char ch=evt.getKeyChar();if(ch=B|ch=b)squareColor=Color.blue;repaint();else if(ch=G|ch=g)squareColor=Color.green;repaint();else if(ch=R|ch=r)squareColor=Color.red;repaint();else if(ch=K|ch=k)squareColor=Color.black;repaint();,public void keyPressed(KeyEvent evt)int key=evt.getKey

45、Code();if(key=KeyEvent.VK_LEFT)squareLeft-=8;if(squareLeft getSize().width-3-SQUARE_SIZE)squareLeft=getSize().width-3-SQUARE_SIZE;repaint();,else if(key=KeyEvent.VK_UP)squareTop-=8;if(squareTop getSize().height-3-SQUARE_SIZE)squareTop=getSize().height-3-SQUARE_SIZE;repaint();public void keyReleased(

46、KeyEvent evt),课堂练习,编Applet程序在标签中显示输入按键的编码值。,1.菜单编程的基本步骤,创建菜单条(MenuBar)例:MenuBar m_MenuBar=new MenuBar();/创建一个空的菜单条MenuBar 创建不同的菜单项(Menu)并加入到菜单条中 例:Menu menuEdit=new Menu(编辑);m_MenuBar.add(menuEdit);创建菜单子项(MenuItem)加入菜单项例:MenuItem mi_Edit_Copy=new MenuItem(复制);menuEdit.add(mi_Edit-copy);,使用Menu的addSe

47、parator()方法可以在各菜单项之间可以加入分隔线。也可以给菜单子项定义快捷键 具体有两种方法:方法一:创建MenuItem对象时设定。例如:MenuItem mi_File_Open=new MenuItem(打开,new MenuShortcut(o);方法二:通过MenuItem对象的setShortCut方法。mi_File_Open.setShortcut(new MenuShortcut(o);,给窗体设定菜单条 执行窗体对象的setMenuBar方法可将菜单条绑定给窗体。各菜单子项注册动作事件监听者 例如:mi_Edit_Copy.addActionListener(this

48、);在监听者的actionPerformed(ActionEvent e)方法中实现处理代码 通过e.getSource()或e.getActionCommand()判断事件源,为每个菜单项编写对应的功能代码。,例7-18 一个简单的菜单,import java.applet.*;import java.awt.*;import java.awt.event.*;public class Menudemo extends Frame implements ActionListener TextArea ta;public Menudemo()ta=new TextArea(30,60);add

49、(ta);MenuBar menubar=new MenuBar();setMenuBar(menubar);Menu file=new Menu(File);menubar.add(file);,MenuItem open=new MenuItem(open,new MenuShortcut(KeyEvent.VK_O);MenuItem quit=new MenuItem(Quit,new MenuShortcut(KeyEvent.VK_Q);file.add(open);file.addSeparator();file.add(quit);this.addWindowListener(

50、new WindowAdapter()public void windowClosing(WindowEvent e)Frame frm=(Frame)(e.getSource();frm.dispose(););,open.addActionListener(this);quit.addActionListener(this);setSize(300,300);setVisible(true);,public void actionPerformed(ActionEvent e)if(e.getActionCommand()=Quit)dispose();else ta.setText(re

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号