图形用户界面设计谈谈你对Java事件处理的理解事件处理模型基于继承的事件处理模型(JDK1.0)JDK1.0中,事件处理是基于继承的,事件先发送到组件,然后沿容器层次向上传播。没有被组件处理的事件会自动地继续传播到组件的容器。基于继承的事件处理模型的特点①事件只能由产生这个事件的组件或包含这个组件的容器处理。②大量的CPU周期浪费在处理不相关的事件上。任何对于程序来说不相关或者并不重要的事件会沿容器层次一路传播,直到最后被抛弃,③为了处理事件,必须创建一个庞大的handleEvent()方法,该方法中包含的大量的逻辑判断,给编程带来困难。不能为每一种事件特定指定操作动作基于代理的事件处理模型(JDK1。1)在这个模型中,事件被直接送往产生这个事件的组件,对于每一个组件注册一个或多个称为监听者的类,这些类包含事件处理器,用来接收和处理这个事件。监听者就是实现了Listener接口的类。事件是只向注册的监听者报告的对象。每个事件都有一个对应的监听者接口基于代理的事件处理模型的特点①事件不会被意外地处理。在层次模型中,一个事件可能传播到容器,并在非预期的层次被处理。②有可能创建并使用适配器(adapter)类对事件动作进行分类。③有利于把工作分布到各个类中。重点学习这种事件处理模型1.getContentPane().add(btn)是添加按钮。2.类实现implementsActionListener那它就是一个监听器;(下一行的this就是监听器)btn.addActionListener(this)是按钮添加监听器。就是说,点击按钮,触发监听器,监听器自动调用它的actionPerformed(ActionEvente)方法处理事件!3.如果多个按钮的话,你可以根据按钮的名字判断!importjava.awt.BorderLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.*;publicclassTestextendsJFrameimplementsActionListener{publicTest(){JButtonb1=newJButton(b1);JButtonb2=newJButton(b2);b1.addActionListener(this);b2.addActionListener(this);this.add(b1,BorderLayout.CENTER);this.add(b2,BorderLayout.SOUTH);}publicvoidactionPerformed(ActionEvente){if(e.getActionCommand().equals(b1)){System.out.println(youclickb1);}elseif(e.getActionCommand().equals(b2)){System.out.println(youclickb2);}}publicstaticvoidmain(String[]args){Testt=newTest();t.setSize(300,200);t.setVisible(true);t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}(1)ActionEvent事件的相应的事件处理器接口是ActionListener,所在的类包是java.awt.event。(2)取得窗口容器的代码是JFrame()。(3)向JTextArea的win.setVisible()方法传递false参数可以防止用户修改文本填空(4)BorderLayout布局类所在的类包是java.awt。(5)一个是JMenu的JMenuItem应称为子菜单。(6)setJMenuBar(JMenuBarbar)方法把JMenuBar添加到JFrame。填空(7)JFrame的缺省布局管理器是BorderLayout。(8)清空内存的命令是publicvoidsetText(Strings)。(9)Swing的事件处理机制包括事件源、事件和事件处理。填空(10)若要取消布局管理器,需要调用setLayout(null)方法。(11)所有组件都可以通过setBounds(inta,intb,intwidth,intheight)方法向容器中添加组件。(12)publicvoidsetForeground(Colorc)方法用于设置组件的前景色,publicvoidsetBackground(Colorc)方法用于设置组件的背景色。填空(13)下列Applet在窗口中实现一个不可编辑的TextField,并且显示“ok”。请填写正确的程序在横线处。importjava.applet.Applet;importjava.awt.*;publicclassTest13extendsApplet{TextFieldtf;publicvoidinit(){setLayout(newGridLayout(1,0);tf=newTextField(“ok”);tf.setEditable(false);add(tf);}}填空3、编写应用程序,有一个标题为“计算”的窗口。窗口中添加两个文本区,当在一个文本区中输入若干个数字时,另一个文本区同时对输入的数进行求和运算并求出平均值。也就是说,随着输入的变化,另一个文本区不断更新求和及平均值。importjava.util.*;importjava.applet.*;importjava.awt.*;importjava.awt.event.*;publicclassTextEveextendsAppletimplementsTextListener{TextAreatext1,text2;publicvoidinit()//初始化{text1=newTextArea(6,15);text2=newTextArea(6,15);add(text1);add(text2);text2.setEditable(false);text1.addTextListener(this);text2.setText(pleaseenterthenumberinleftboxanduse',');//提示语句}publicvoidtextValueChanged(TextEvente){inti;doubleSum,Avg;if(e.getSource()==text1){Sum=0;Avg=0;StringNum=text1.getText();//读取内容StringTokenizerNumChe=newStringTokenizer(Num,,'\n');intn=NumChe.countTokens();int[]a=newint[n];for(i=0;in;i++)//将值放到数组中{a[i]=Integer.parseInt(NumChe.nextToken());}Sum=a[0];for(i=1;in;i++){Sum+=a[i];//求和}Avg=Sum/n;//求平均值StringRESum=String.valueOf(Sum);StringREAvg=String.valueOf(Avg);text2.setText(TheSumis:+RESum+\n+TheAvgis:+REAvg);//显示}}}4、编写一个应用程序,设计四个按钮,分别用于加、减、乘、除运算。窗口中还有三个文本框。单击相应的按钮,两个文本框输入数据,第三个文本框中显示结果。要求处理NumberFormatException。importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjava.math.*;publicclassHomework10_3{publicstaticvoidmain(Stringargs[]){MathWindowwin=newMathWindow();}}classMathWindowextendsJFrame{JTextFieldtext1,text2,text3;JPanelps,pn;MathWindow(){text1=newJTextField(10);text2=newJTextField(10);text3=newJTextField(10);JButtonbutton1,button2,button3,button4;button1=newJButton(加);button2=newJButton(减);button3=newJButton(乘);button4=newJButton(除);ps=newJPanel();pn=newJPanel();pn.add(text1);pn.add(text2);pn.add(text3);ps.add(button1);ps.add(button2);ps.add(button3);ps.add(button4);add(pn,BorderLayout.CENTER);add(ps,BorderLayout.SOUTH);setBounds(100,100,370,150);setVisible(true);validate();button1.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){Strings1=text1.getText();Strings2=text2.getText();try{BigIntegern1=newBigInteger(s1);BigIntegern2=newBigInteger(s2);n2=n1.add(n2);text3.setText(n2.toString());}catch(NumberFormatExceptionee){text3.setText(请输入数字字符);text1.setText(null);text2.setText(null);}}});button2.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){Strings1=text1.getText();Strings2=text2.getText();try{BigIntegern1=newBigInteger(s1);BigIntegern2=newBigInteger(s2);n2=n1.subtract(n2);text3.setText(n2.toString());}catch(NumberFormatExceptionee){text3.setText(请输入数字字符);text1.setText(null);text2.setText(null);}}});button3.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){Strings1=text1.getText();Strings2=text2.getText();try{BigIntegern1=newBigInteger(s1);BigIntegern2=newBigInteger(s2);n2=n1.multiply(n2);text3.setText(n2.toString());}catch(NumberFormatExceptionee){text3.setText(请输入数字字符);text1.setText(null);text2.setText(null);}}});button4.addA