基本概念
AWT与SWING的区别
实现原理
轻量级控件和重量级控件
AWT 中的图形函数与操作系统所提供的图形函数之间有着一一对应的关系,我们把它称为“peers”。
标准版的Java中则提倡使用Swing, 也就是通过牺牲速度来实现用程序的功能。
回调函数
是指通过函数参数传递到其它代码的,某一块可执行代码的引用。这一设计允许了底层代码调用在高层定义的子程序。
java中使用接口实现函数的回调。
一、GUI初步——界面内容的设计
参考:
先明白awt的组件的继承树:容器和控件
两类容器
1 顶层的window(frame和dialog),可以作为独立的桌面应用显示
2 仅作为下层容器的panel,虽然是容器,但是也必须依附于frame或者dialog。
两种形成界面的方式
a 在main函数中,声明各个组件,将相应的组件添加到容器中,像这样:
public static void main(String args[]){
//top-level container
Frame frame=new Frame("myFrame");
frame.setLayout(new FlowLayout());
frame.setSize(200,100);
//控件
Label lbl=new Label("myLabel");
lbl.setBackground(Color.pink);
//各组件 独立创建,通过add关联
frame.add(lbl);
frame.setVisible(true);
}
b 继承frame,自定义frame或者dialog类中,在构造函数中,组织这个窗口程序的逻辑(较为常用)。
public class MyFrame extends Frame {
Button myButton = new Button("CLICK");
Label myLabel = new Label("text");
public MyFrame() {
this.setLayout(new FlowLayout());
this.setSize(200,100);
this.add(myButton);
this.add(my label);
}
public static void main(String args[]){
MyFrame tmp = new MyFrame ();
}
}
二、用户操作响应——监听
事件监听和处理的根本技术,是回调。
You implement an action listener to define what should be done when an user performs certain operation.
不同的事件监听需要实现不同的接口。
Java添加事件监听的四种方法代码实例
http://www.jb51.net/article/55452.htm
之前我们先了解一下内部类的知识,对于能访问的内容和可见性
http://www.cnblogs.com/dolphin0520/p/3811445.html
几种不同的内部类
一般来说,匿名内部类用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承方法的实现或是重写。
成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)。
原理性的知识:
在外部类被声明的时候,内部类并没有被创建,所以外部类的函数需要调用内部类的函数,需要new之后才能使用。
(可以百度——类的加载机制~)
代码设计技巧:
设置listener的实现类时,可以添加有参的构造函数,以获取模型的数据和更改相应的窗口部件
btBlue.addActionListener(new ColorEventListener(this));
//把模型类添加到listener中,以便访问操作数据
界面有多个按钮,对于一个监听类,怎么一一识别,赋予不同的操作。
Event类:
public Object getSource()
The object on which the Event initially occurred.
返回的object可以直接和声明的控件做==比较(监听类实现在frame子类自身)
当然,如果使用单独的监听类,可以使用event的getsource然后使用组件的name做字符串比对来实现。(注意类型转换,getSource返回的Object)
控件有如下方法:
public setName()
public getName()