Java学习笔记12

 
==============================================================================
JAVA
第十二天
==============================================================================
今天的内容 : GUI:
   
重点 -> 设计模式 : 观察者设计模式 .
   -------------------------------------------------------------------------------------
   (1)
构造图形化界面的四个步骤 :
   1.
选择容器
   2.
设置布局管理器
   3.
添加组件
   4.
设置事件监听器
   ------------------------------------------------------------------------------------
   awt: java.awt;
早期的包 .
   javax.swing:
现在使用的包 . 扩展自 awt.
   (2)
组件的父类 : Jcomponent
   (3)
设置布局管理器 : LayoutManager 是一个接口
       
第一个实现类 : 流式管理器 :FlowLayout()    
   JFrame:
6 层面板组成 . 我们上午的组件是放在内容面板上 ; 默认布局管理器是 :BorderLayout();
   JPanel
的默认布局管理器是 FlowLayOut();
   
如果是
   (4) BorderLayout()
东西南北中
       JFrame
的默认布局管理器是 :BorderLayout();
   (5) GirdLayout() :
网格布局
       new GirdLayout(3,2) //
表示 3 2 ;
   (6) CardLayout() :
卡片布局 / 管理器 .
   (7) GridBagLayout();
复杂的网格布局 允许一个组件跨越多行和多列 .
   (8)
小组件
       <1> Button
       <2>    JTextField()
       <3>    JTextArea()
       <4> JScrollPane(
组件 );// 为组件添加滚动功能 .
       <5> JLable();
显示组件
       <6> JComboBox():
下拉选择框
       <7> JPasswordField :
密码输入框
       --------------------------------------------------
       <8>JList
列表
       <9>JRadioButton  
单选框
      <10>JCheckBox
复选框
       <11>JMenuBar
菜单条
       <12>JMenu
菜单( JMenu 也可以放在 JMenu 里面,做成二级菜单)
       <13>JMenuItem
菜单项
       <14>JCheckBoxMenuItem
多选菜单项
       <15>JRadioButtonMenuItem
单选菜单项
       <16>JPopupMenu
弹出式菜单
       <17>JToolBar
工具条
       <18>JEditorPane
显示格式化文本
       <19>JSplitPane
分隔面板
       <20>JTabbedPane
分层面板
       <21>JSlider
滑动条
       <22>JProgressBar
进度条
       <23>JFileChooser
文件选择器
       <24>JColorChooser
颜色选择器
   ----------------------------------------------------------------------------------------------
   (9)AWT
事件模型 ( 源自观察者模式 )
       
体现 : 个司其职 , 接口 , 弱藕合 .
       <1>
事件源 : 发出事件对象的对象 需要授权 ( 注册 ) 给一个事件监听器
       <2>
事件对象 :  
       <3>
事件监听器 : 处理事件
   
工作原理 : 事件源先和事件监听器建立授权注册关系 , 当事件条件满足的时候 , 由事件源给注册的事件监听器发送事件对象 , 由监听器来处理事件 .
   
事件源可以成为多种事件的事件源 .
   
一个事件监听器可以在多个事件源上注册 .
   
一个事件源在一种事件上可以注册多个监听器 .
   
体现了弱藕合的关系
   
事件对象 , 继承 EevetObject 接口 , 封装了一个事件源对象 .
   
事件监听接口 , 继承 EventListener, 其中没一个方法都要以事件对象作为参数 .
   
事件源给事件监听器发送事件对象就是事件源以事件对象作为参数,调用监听器接口的相应方法,通过回调,调用的是不同监听实现类的方法
   
步骤 :
   <1>
先写一个事件对象类继承自 EventObject(), 它是一个标记接口 , 里面没有定义方法 , 只有一个属性 :source; 此时需要事件对象类 , 写出有参的构造方法 . 来构造父类 , 给父类的 source 赋值 .
   <2>
写事件监听器接口 , 实现 EventListener 接口 , 用来定义事件监听器要实现的方法 .
   <3>
写事件源类 , 里面要有添加 , 删除和激发监听器的方法 . 要用一个集合来存储监听器对象 . 其中的激发事件的方法要着重的提一下 , 这个方法以事件对象为一个参数 , 自己写怎么激发 ( 调用 ) 事件监听器的方法 . 通过遍历所有监听器 , 通过接口调用所有监听器的处理方法 .
   <4>
写事件监听器对象实现自己定义的事件监听器的接口 .
   
例子 :
   package homework;
   import java.util.*;
   public class TestGirl {
       public static void main(String[] args) {
           Girl g=new Girl("
小企鹅 ");
           EnmotionEventListener e1=new Chenpy("
陈鹏烨 ");
           EnmotionEventListener e2=new yangqing("
杨青 ");
           
           g.addEventListener(e1);
           g.addEventListener(e2);
           
           g.fire();
       }
   }
   /*
   <1>
先写一个事件对象类继承自 EventObject(), 它是一个标记接口 ,
   
里面没有定义方法 , 只有一个属性 :source; 此时需要事件对象类 ,
   
写出有参的构造方法 . 来构造父类 , 给父类的 source 赋值 .*/
   class EnmotionEvent extends EventObject{
       public EnmotionEvent(Object o){
           super(o);
       }
   }
   //<2>
写事件监听器接口 , 实现 EventListener 接口 , 用来定义事件监听器要实现的方法 .
   interface EnmotionEventListener extends EventListener{
       void happy(EnmotionEvent e);
       void sad(EnmotionEvent e);
   }
   /*
   <3>
写事件源类 , 里面要有添加 , 删除和激发监听器的方法 . 要用一个集合
   
来存储监听器对象 . 其中的激发事件的方法要着重的提一下 , 这个方法以
   
事件对象为一个参数 , 自己写怎么激发 ( 调用 ) 事件监听器的方法 . 通过
   
遍历所有监听器 , 通过接口调用所有监听器的处理方法 .*/
   class Girl{
       String name;
       List ls=new ArrayList();
       public Girl(String name){
           this.name=name;
       }
       public void addEventListener(EnmotionEventListener e){
           ls.add(e);
       }
       public void removeEventListener(EnmotionEventListener e){
           ls.remove(e);
       }
       public void fire(){
           EnmotionEvent e=new EnmotionEvent(this);
           for(int i=0;i<10;i++){
               Iterator it=ls.iterator();
               while(it.hasNext()){
                   EnmotionEventListener en=(EnmotionEventListener)it.next();
                   if(i%2==0){
                       en.happy(e);
                   }
                   else{
                       en.sad(e);
                   }
               }
           }
       }
       public String getName() {
           return name;
       }
   }
   //<4>
写事件监听器对象实现自己定义的事件监听器的接口 .
   class Chenpy implements EnmotionEventListener{
       String name;
       public Chenpy(String name){
           this.name=name;
       }
       public void happy(EnmotionEvent e){
           Girl g=(Girl)e.getSource();
           System.out.println(name+"
: "+g.getName()+" 你高兴我就高兴 , 嘻嘻 ");
       }
       public void sad(EnmotionEvent e){
           Girl g=(Girl)e.getSource();
           System.out.println(name+"
: "+g.getName()+" 别伤心了 ");
       }
   }
   class yangqing implements EnmotionEventListener{
       String name;
       public yangqing(String name){
           this.name=name;
       }
       public void happy(EnmotionEvent e){
           Girl g=(Girl)e.getSource();
           System.out.println(name+"
: "+g.getName()+" 你高兴我不高兴 !");
       }
       public void sad(EnmotionEvent e){
           Girl g=(Girl)e.getSource();
           System.out.println(name+"
: "+g.getName()+" , 气死你 ! 哈哈 ");
       }
   }

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

炼丹狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值