Java学习笔记12

来源:互联网 发布:非著名相声演员知乎 编辑:程序博客网 时间:2024/04/29 23:34
 
==============================================================================
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) //
表示32;
   (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()+",气死你!哈哈");
       }
   }

 
原创粉丝点击