day12

来源:互联网 发布:淘宝贷利息多少 编辑:程序博客网 时间:2024/05/01 03:32
一、复习AWT事件模型(Observer模式) 
   1、事件源 
   2、事件对象 
   3、事件监听器 

事件源和监听器事先进行授权注册,当事件条件满足时,事件源会给注册的监听器发送一个事件对象,由事件监听器作出相应的处理。 

一个事件源可以是多种事件的事件源 
一个事件源就同一类事件可以注册多个监听器 
一个监听器可以同时注册在多个事件源当中 

事件源和监听器是独立,弱耦合的,是各司其职的 

事件对象中会封装事件源对象 
事件监听接口中的每一个方法都要以事件对象为参数 
事件源中要保存和它有监听关系的监听器 
事件源给事件监听器发送事件对象:事件源以事件对象作为参数,调用监听器接口的相应方法,通过回调,调用的是不同监听实现类的方法 

二、 
在Java的图形编程中,所有动作(事件)都已经提供了相应的事件对象和事件监听接口, 
例如:实现窗口的关闭按钮,点击关闭按钮会发出相应的事件对象,相应的调用监听器中实现好的方法。 
相应的方法清参阅Java2 SE API帮助文档。 

缺省适配模式,通过一个抽象类实现接口,抽象类中的接口方法实现,都是一个无意义的空实现,可以继承这个抽象类,只覆盖向覆盖的方法就可以了。 

在java.awt.event包中,会有一些适配类,也就是把相应的XXXListener,换成XXXAdapter就是适配类。 
适配类是抽象类,其中对接口XXXListener中的方法进行了空实现,实现这个类,覆盖对自己有用的方法 

在java.awt.event包中的ActionEvent类,在以下操作中会发送这个事件, 
1,JButton组件,按钮被点击 
2,JTextField组件,在单行文本域中按Enter键。 
3,JCheckBox组件,选中了复选框。 
4,JRadioButton组件,选中了单选按钮。 
5,JMenu组件,选中菜单项。 


添加事件监听: 
1、实现监听接口 
2、将监听器对象注册在组件(事件源)中 

ActionEvent  
事件源 --- 组件 JButton 按钮   点击触发ActionEvent  
               JTextField 单行文本域  输入内容以后回车触发ActionEvent  
jtf.getText();  //得到文本域中的内容 

练习: 
1、写一个图形界面,采用BorderLayout布局,中间的部分放置一个可以滚动不可编辑的JTextArea,南面放置一个可以编辑的JTextField, 
但在TextField中输入文字并按下回车的时候,文字会添加到TextArea中 

2、为BAM添加用户界面 
需要以下几个类: 

BAMClient 其中会包含一个Frame,这是用户主界面 
MainPanel:主界面,用户可以选择开户或者登录 
RegisterPanel:用户开户具体用到的界面 
LoginPanel:用户登录需要的界面 
BusinessPanel:界面上会显示账户的功能 至少包括存款和取款,对于可透支的用户,还允许用户修改透支额度,对于贷款用户,还允许用户贷款和还贷款 

注:本练习的界面布局不做要求,请阅读现有代码,添加事件处理代码 
提示:在开户或者登录之后都会跳到BusinessPanel,而用户点击了交易之后,界面停留在BusinessPanel 
要随时注意在BusinessPanel上根据数据的变化更新显示信息 

三、多线程 
C++的多进程是OS系统并发的一个任务 
Java中没有多进程,一个JVM就是一个进程 

线程是在进程中并发的一个顺序的执行流程 

多进程:划分时间片,宏观上并行,微观上串行 
多线程:cpu在进程内部再划分时间片 

CPU ,代码 ,数据 
进程:进程间数据独立 
线程:数据空间共享,堆空间的共享(堆空间中存放的是对象),栈空间是独立的 
所以线程间切换容易,称为轻量级进程 

一个线程对象代表了一个线程,并非就是一个线程 
线程是操作系统中负责维护的资源 
java.lang.Thread类的一个对象就代表一个线程 
线程是底层OS维护的资源,JVM跑在OS上,在JVM中创建一个Thread对象,调用其start()方法,底层OS会申请一个线程资源,线程对象可到底层管理一个线程 
创建好线程之后,把要让线程执行的代码封装到线程对象中(覆盖run()方法) 

实现线程代码的方式: 
1、继承Thread 类,覆盖run()方法 
   去底层申请线程并运行,对线程对象调start()方法,main方法是一个主线程 
   宏观并行,微观串行 
2、实现Runnable接口 
  使用多态获得Runnable对象,成为目标对象 
  再利用目标对象构造线程对象  Thread t = new Thread(target); 


四、多线程的状态转换图(7状态图) 
  见另一文件,名为Thread.pdf 


作业: 
用两种方式实现两个线程,一个线程负责打印1-2600,另一个线程打印A-Z,反复打印100遍 

原创粉丝点击