GUI代表图形用户界面(Graphical User Interface),Java API中提供了两套组件用户支持编写图形用户界面,包括AWT和Swing。
AWT使用本地操作系统的代码资源,被称为重量级组件。
Swing建立在AWT提供的基础之上,同时使用AWT相同的事件处理机制。Swing组件是轻量级的GUI组件,完全有纯Java代码编写,不依赖于任何特定平台,采用MVC架构方式来设计组件类。它将表示层分为三个分离的部分,分别是模型(model)、视图(view)、控制器(controler)。模型存储定义组件的数据,视图从模型中的数据创建组件的可视化表示,控制器处理用户与组件的交互操作,并在必要时更改模型或视图以响应用户行为。
开发Swing时因为视图和控制器存在很强的依赖关系,于是将视图和控制器组合称为UI委托的带个逻辑实体,所以Swing方法也被称为模型-委托架构或分离模型架构。
容器和组件
容器是用来放置其它组件特殊类型的组件;组件是独立的可视化控件。一个组件要显示出来就必须放置在一个容器内,容器也是组件,容器也可以放置其它容器。
容器分为重量级容器和轻量级容器。
重量级容器:
包括JFrame(窗体)、JDialog(对话框)、JWindow(窗口)、JApplet(小程序)。因为都继承AWT的Container,所以被成为重量级容器。每个程序至少要有一个重量级容器才可以提供图形化用户界面。
每个包含层次必须从重量级容器开始,重量级容器不能包含在其它任何容器中。我们所接触到的是层次面板(分为内容面板和可选的菜单栏),Swing的组件都放在内容面板中。
轻量级容器:
包括常用的面板Jpanel、分隔窗格、滚动窗格、标签窗格、工具条,它们和普通的组件一样继承自Swing类的JComponent,故成为轻量级容器。它们的存在主要是为了定位其它组件。
组件:
按钮(类JButton)、单选按钮(类JRadioButton)、复选框(类JCheckBox)、组合框(类JComboBox)、列表框(类JList)、文本字段(类JTextField)、纯文本区域(类JTextArea)等 都继承自Swing类的JComponent。
组件在容器中的布局:
组件要想在程序中显示就必须添加到容器中,组件在容器中的排列的形式根据是否使用布局管理器,以及使用何种类型的布局管理器来决定。
如果需要将组件在容器中精确定位,就必须使用容器的setLayout(null)方法,然后调用组件的setBounds()方法设置组件的边界。
组件采用精确定位后不支持窗口的改变。
AWT和Swing API 内置布局管理器
流式布局管理器FlowLayout(JPanel组件默认采用FlowLayout布局管理器):
安装组件添加顺序从左到右排列,可以控制容器组件居中、居左、居右,可以控制组件的垂直和水平间距。
BorderLayout管理器(不是用来放置组件的,常用于放置中间容器):
分为南北中东西五个区域,其中中间的面积和权力最大。
Jframe默认的管理器。
事件驱动编程
根据事件发生而执行代码的编程方式称为事件驱动编程。
例子:通过点击一个按钮触发一个事件,按钮是该事件的事件源,将监听对象注册到按钮上,当一个动作事件发生在按钮上时,按钮通过调用定义的监听器的actionPerformed()方法来探知监听器。
事件和事件源
运行Java GUI程序时,程序负责与用户交互,而事件则驱动程序的执行。事件用于描述发生了什么事情,可以由外部用户的行为触发,例如鼠标移动、按钮点击、键入字符等,也可以由程序的内部活动触发,例如数据模型发生变化,程序可以选择响应或者忽略事件。
生成一个事件并触发它的组件成为事件源。一个事件是一个事件类的实例对象,事件类的根对象是java.util.EventObject。
事件监听器、注册和处理事件
事件源触发一个事件但是事件源本事不处理,而是委托给对该 事件有兴趣的对象来处理。这个被委托来处理事件的对象,被称为事件监听器。
成为事件源上的一个事件监听器的方法:
1.创建一个监听器对象 监听器对象必须是对应的事件监听器接口的实例。Java为每种事件类型都提供了监听器接口。
2.将监听器对象注册到事件源上。