转至:http://sllereak.blog.163.com/blog
--GUI
*Graphics User Inerface--图形用户接口
--AWT
*Abstract Windows Toolkit--抽象窗口工具(抽象是只跨平台)
--AWT结构
|--Frame(传统的窗体)
| -----window(可以作为一个单元独立显示)
| |--Dialog(弹出的窗体)
--Contaner(容器)
| | -----panel(只能作为一个容器的一部份,显示在window里面),比如applet(已经过时)
*Component--组件
|
|
--Button,Label等不能作为容器的组件
--布局管理器
*BorderLayout:(frame的默认管理器)划分为东西南北中五个区域
*添加的时候需要指定添加的区域,不指定默认为中,多次添加到一个区域会覆盖
*FlowLayout:(panel的默认管理器) 流水式按个排列,默认为居中,也可以设置成左对齐
*GridLayout:把容器分为指定的格子,划分方式通过构造函数决定
*可以设置为null,这就可以手动设置布局,如果没有设置成null,会取默认值,任何手动设置都会视为无效
--java事件监听模型(观察者设计模式)
看例子
--------------------------------时间参数
public class MyEvent {
public int id;
public String newName;
public String oldName;
public MyEvent(int id,String oldName,String newName){
this.id=id;
this.newName=newName;
this.oldName=oldName;
}
}
--------------------------------时间监听器
public interface MyListner {
void doSomeThing(MyEvent e);
}
--------------------------------事件源
public class MyClass {
int id;
String name;
private MyListner listner;
public MyClass(int id,String name){
this.id=id;
this.name=name;
}
public void changeName(String name){//事件触发
if(listner!=null){
MyEvent e=new MyEvent(id,this.name,name);
listner.doSomeThing(e);
}
this.name=name;
}
public void AddLisner(MyListner listner){
this.listner=listner;
}
}
--------------------------------
public class App {
public static void main(String[] args){
MyClass my=new MyClass(10,"zhangsan");
System.out.println(my.name);
my.AddLisner(new MyListner(){//事件注册
public void doSomeThing(MyEvent e) {
// TODO Auto-generated method stub
System.out.println("旧:"+e.oldName);
System.out.println("新:"+e.newName);
}
});
my.changeName("lisi");
}
}
-------如果接口中方法很多一般api都提供事件监听的Adapter类--------
--内部类--一个类的成员也是一个类
好处
*方便的访问外部类的成员变量和成员方法
*隐藏该内部类不被其他地方访问
--局部类
*申明在方法中的类,基本上用不上,所以不用研究
--每一个容器都有paint()方法,并且是这个容器.setVisable(true)的时候自动被调用(需要重画的时候自动被调用,可以显式的调用容器的.repaint()方法执行从画)
*repaint()方法的实质:repaint()-->update()-->paint()--双缓冲方式绘制