您的位置:首页 > 编程语言 > Java开发

Java学习笔记12

2007-06-17 15:55 274 查看
==============================================================================
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()+"该,气死你!哈哈");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: