GUI全称是Graphical User Interface,即图形用户界面。根据作用GUI组件可分为基本组件和容器。
组件又称构件,诸如按钮、文本框之类的图形界面元素
容器其实是一种比较特殊的组件,可以容纳其它组件,如窗口、对话框等
所有的容器类都是java.awt.Container的直接或间接子类。
AWT(Abstract Window Toolkit),抽象窗口工具包,SUN公司提供的用于图形界面编程(GUI)的类库。基本的AWT库处理用户界面元素的方法是把这些元素的创建和行为委托给每个目标平台上(Windows、Unix、Macintosh等)的本地GUI工具进行处理。例如:如果我们使用AWT在一个Java窗口中放置一个按钮,那么实际上使用的是一个具有本地外观和感觉的按钮。这样,从理论上来说,我们所编写的图形界面程序能运行在任何平台上,做到了图形界面程序的跨平台运行
Container
–Container的两个主要类型是Window和Panel
–Window是Java.awt.Window的对象
Window是java.awt.Window的对象。Window是显示屏上独立的本机窗口,它独立于其它容器
Window有两种形式:Frame(框架)和Dialog(对话框)。Frame和Dialog是Window的子类。Frame是一个带有标题和缩放角的窗口。对话框没有菜单条。尽管它能移动,但它不能缩放。
-Panel是Java.awt.Panel的对象
Panel包含在另一个容器中,就像一个集合一样里面可以其他的集合,或是在Web浏览器的窗口中。Panel确定一个四边形,其它组件可以放入其中。Panel必须放在Window之中(或Window的子类中)以便能显示出来
–注:容器不但能容纳组件,还能容纳其它容器,这一事实对于建立复杂的布局是关键的,也是基本的。
Frame
–Frame是一个顶级窗口。
–Frame的缺省布局管理器为BorderLayout。
Panel
–Panel无法单独显示,必须添加到某个容器中。
–Panel的缺省布局管理器为FlowLayout。
–当把Panel作为一个组件添加到某个容器中后,该Panel仍然可以有自己的布局管理器。因此,可以利用Panel使得BorderLayout中某个区域显示多个组件。
public class FrameWithPanel extends Frame
{
public FrameWithPanel(String title)
{
super(title);
}
public static void main(String[] args)
{
FrameWithPanel frame = new FrameWithPanel("frame with panel");
Panel panel = new Panel();
frame.setSize(200, 200);
frame.setBackground(Color.BLACK);
frame.setLayout(null);
panel.setSize(100 ,100);
panel.setBackground(Color.YELLOW);
frame.add(panel);//panel必须添加到其他的容器中去.
frame.setVisible(true);
}
}
对于事件:
事件,当你点击一个按钮的时候立即就产生了一个事件,事件本身是个对象,如计算器,当你点击8时它立即就产生了一个对象,是事件对象.
委托模型不像层次模型,不用层层向外抛,如果有关联的就执行,没有关联的就什么也不做
Event,如计算器,当你单击8的时候他怎么就知道是8呢?当然是那个ActionEvent那个对象,它封装了事件的信息.它不是我们去new出来的,就如异常一样,异常对象也不是我们去new出来的.在这里关联到一个很重要的设计模式,就是观察者模式
例如:button则是个具体的主题角色
processActionEvent在Button中的方法就是这个方法去调用的.
过程:
–在Button对象上用鼠标进行点击时,将发送一个ActionEvent事件。这个ActionEvent事件会被使用addActionListener()方法进行注册的所有ActionListener的actionPerformed()方法接收
–ActionEvent类的getActionCommand()方法返回与动作相关联的命令名称。
–以按钮的点击动作为例,将返回Button的标签。
代码:
public class TestButton extends Frame{
public static void main(String[] args) {
TestButton tb=new TestButton();
Button b1=new Button("click me");
b1.addActionListener(new MyButtonHandler());
tb.setLayout(new BorderLayout());
tb.add(b1);
tb.pack();
tb.setVisible(true);
}
}
class MyButtonHandler implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("click me");
}
}
ActionListener是没有适配器类的,原因:它只有一个方法啊,没必要再弄一个适配器类啊.
首先要弄清楚框架图,它们之间的层次关系
初始化组件,设置布局管理器,设置一堆属性,分门别类加上去,增加事件处理器