---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一、概述
GUI全称Graphical User Interfaces,译为图形用户户界面,又称为图形用户接口,GUI指的就是采用图形方式显示的计算机操作用户界面。
不过java在GUI上并没有太大优势,java的优势还是在于网络,这里作为了解即可,就不深入探讨了。
实现GUI的有两个必不可少的条件:组件和事件
java将关于界面的组件封装为对象,放在了两个包中:java.Awt和javax.Swing。
------Awt包:Abstract Window Toolkit,即抽象窗口工具包。要调用本地系统方法实现功能,属重量级控件。
------Swing包:在AWT的基础上建立的一套图形界面系统,其中提供了更多的组件,且完全由java实现,增强了移植性,属轻量级控件。
二、awt包
\
1,Container(容器)和Component(组件)的关系
AWT中的两个核心类是Container(容器)和Component(组件)
java的图形用户界面的最基本组成部分是Component,Component类及其子类的对象用来描述以图形化方式显示在屏幕上并能与用户进行交互的GUI元素,例如:一个按钮,一个标签等。
一般的Component对象不能独立的显示出来,必须将“放在”某一的Container对象中才可以显示出来
Container是Component子类,Container子类对象可以“容纳”别的Component对象,也可以被当做Component对象添加到其他Container对象中。
Container对象可使用方法add()向其中添加其他Component对象。
如果还不懂的话,没关系,我再简单的说
无论容器(container)还是按钮(button)还是标签(label)都是组件,而容器中能够添加其他的组件。
2,Window与pannel
a,Window:其对象表示自由停泊的顶级窗口
b,Panel:其对象可作为容纳其它Component对象,但不能独立存在,必须被添加到其他Container中(如Window或Applet)
3,Frame:
Frame是Window的子类,由Frame或其子类创建的对象为一个窗体
4,举例:
- <span style="font-size:18px;"> Frame f = new Frame("测试窗体");
- f.setLayout(new FlowLayout());
- f.setVisible(true);
- f.setBounds(600, 200, 500, 400);
- Button b = new Button("一个按钮");
- f.add(b);</span>
三、布局管理器
Java是跨平台运行的,但是不同的平台对于点及坐标的定义不完全相同。而且屏幕的解析度分辨率不同也会造成位置的变化,为了确保每个组件的相对位置和大小以及外观,java就设计了布局管理器。
1,布局管理器分类:
FlowLayout:浮动布局管理器
BorderLayout:边框布局管理器
GridLayout:网格布局管理器
CardLayout:卡片布局管理器
GridBagLayout:网格包布局管理器
如果大家做过web开发的话就会感到java的布局管理有点象网页的布局,其实网页也是在不同平台,不同分辨率的电脑上运行,从这点来说和java确实挺像的。
2,FlowLayout
是Panel容器的默认管理器,其组件浮动在容器中,它的放置规律是从上到下,从左到右。
- <span style="font-size:18px;">public class FrameFlow {
- public static void main(String[] args) {
- // 创建一个框架
- Frame f = new Frame("Test");
- // 设置窗体大小
- f.setSize(400, 300);
- // 设置窗体显示位置
- f.setLocation(100, 100);
- f.setBackground(Color.orange); // 窗体背景色
- f.setVisible(true); // 窗体可见
- f.setLayout(new FlowLayout());// 设置浮动布局方式
- for (int i = 0; i < 15; i++) {
- f.add(new Button("btn" + i));
- }
- }
- }</span>
3,BorderLayout
布置容器的边框布局,可以对容器组件进行安排,并调整其大小,使其符合五个区域:北、南、东、西、中。每个区域最多只能包含一个组件,并通过相应的常量进行标识:NORTH、SOUTH、EAST、WEST、CENTER,若只有一个组件,默认位置为Center,是Window、Frame和Dialog的默认布局管理器。
- <span style="font-size:18px;">public static void main(String args[]){
- Frame f;
- f=new Frame("Border Layout");
- Button bn=new Button("北");
- Button bs=new Button("南");
- Button bw=new Button("西");
- Button be=new Button("东");
- Button bc=new Button("中");
- f.add(bn,BorderLayout.NORTH);
- f.add(bs,BorderLayout.SOUTH);
- f.add(bw,BorderLayout.WEST);
- f.add(be,BorderLayout.EAST);
- f.add(bc,BorderLayout.CENTER);
- f.setSize(200,200);
- f.setVisible(true);
- } </span>
其他的几种布局实现方式也都差不多,我就不一一写代码了,大家可以自己去试试。
四、事件监听机制
事件监听机制的组成:
事件:用户在界面上的某一个操作,通常使用各种输入设备,如鼠标、键盘等。
事件源:产生事件的组件,例如在一个按钮上的单击就是事件源
监听器:包含事件处理器,负责检查事件是否发生,若发生则激活事件处理器对其处理
事件处理:引发事件后的处理方式。
举例:
- <span style="font-size:18px;"> public static void main(String[] args) {
- Frame f = new Frame("测试窗体");
- f.setLayout(new FlowLayout());
- f.setVisible(true);
- f.setBounds(600, 200, 500, 400);
- Button b = new Button("一个按钮");
- f.add(b);
- /****************添加事件监听机制**************/
- //添加关闭按钮
- f.addWindowListener(new WindowAdapter() {
- //若用子类实现WindowListener接口,就需要覆盖其中的7个方法,可只用到其中的关闭动作,其他动作未用到,但却必须重写全部。
- //因为WindowLister的子类WindowAdapter(适配器)已经实现此接口,并覆盖了其中所有方法。
- //那么只需继承WindowAdapter,覆盖需要的方法即可。
- @Override
- public void windowClosing(WindowEvent e) {
- System.exit(0);
- }
- });
- //添加按钮点击事件
- b.addActionListener(new ActionListener() {
- //由于ActionListerer接口只实现了一个方法,所以不需要适配器,没有**Adapter类,
- //但是若实现方法2个以上则肯定有**Adapter
- private int num = 0;
- @Override
- public void actionPerformed(ActionEvent e) {
- num++;
- System.out.println("点击了一次button" + num);
- }
- });
- }</span>
注:这里事件添加使用的是匿名内部类,如果你对匿名内部类不清楚的话,请看我以前的文章
http://blog.csdn.NET/jin870132690/article/details/41597143#t3
五、最后
关于swing的知识我就不介绍了,用swing包中可以实现可视化编程,有过.net开发经验的人应该了解,拖拖拽拽的就把界面弄好了,非常方便,有兴趣的可以自己去尝试一下。
界面是给用户看的,其实用户关心的很大一部分还是界面漂不漂亮,要想做一款深受大家好评的软件,无论如何界面的美化都是必不可少的。