-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
GUI(图形用户界面)
概述:
GUI:Graphical User Interface(图形用户接口)。用图形的方式,来显示计算机操作的界面,这样更方便更直观。
CLI:Command line User Interface (命令行用户接口)就是常见的Dos命令行操作。需要记忆一些常用的命令,操作不直观。Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中。
AWT与Swing:
java.Awt:Abstract Window ToolKit (抽象窗口工具包),需要调用本地系统方法实现功能。属重量级控件。
javax.Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全 由Java实现。增强了移植性,属轻量级控件。
继承关系图:
Component:是一个容器,是一个特殊的组件,该组件中可以通过add方法添加其他组件进来。
布局管理器:
布局:就是容器中的组件的排放方式。
常见的布局管理器:
FlowLayout(流式布局管理器);从左到右的顺序排列。Panel默认的布局管理器。BorderLayout(边界布局管理器);排序方式:东,南,西,北,中;若窗体只有一个组件,则会覆盖整个窗体。Frame默认的布局管理器。
GridLayout(网格布局管理器);规则的矩阵
CardLayout(卡片布局管理器)选项卡
GridBagLayout(网格包布局管理器)非规则的矩阵
建立一个简单的窗体:
Container常用子类:Window Panel(面板, 不能单独存在。)
Window常用子类:Frame Dialog
简单的窗体创建步骤:
Frame f = new Frame(“my window”);//创建窗体并设置窗体名字
f.setLayout(new FlowLayout());//设置窗体布局
f.setSize(500,400);//设置窗体大小
f.setLocation(300,200);//设置窗体出现在屏幕的位置
Button b = new Button("my button"); //定义组件并设置组件名字
f.add(b);通过add()方法将组件添加进窗体
f.setVisible(true);//设置窗体是否显示
如以下代码:
<span style="font-size:12px;">import java.awt.*; class AwtDemo { public static void main(String[] args) { Frame f = new Frame("my window"); f.setSize(500,400); f.setLocation(300,200); f.setLayout(new FlowLayout()); Button b = new Button("my button"); f.add(b); f.setVisible(true); } <strong>}</strong></span>
事件监听机制组成:
事件源(组件)
事件(Event)
监听器(Listener)
事件处理(引发事件后处理方式)
其中事件源,事件,监听器在java中都已经定义好了,可以直接获取其对象使用,我们能做就是引发事件后的处理方式。
事件监听机制流程图:
事件监听机制:
确定事件源(容器或组件)
通过事件源对象的addXXXListener()方法将侦听器注册到该事件源上。
该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。
一般用匿名内部类来表示。
在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。
事件触发后会把事件打包成对象传递给该变量。(其中包括 事件源对象。通过getSource()或者,getComponent()获取。)
如以下代码:
<span style="font-size:12px;">import java.awt.*; import java.awt.event.*; class FrameDemo { //定义该图形中所需的组件的引用。 private Frame f; private Button but; FrameDemo() { init(); } public void init() { f = new Frame("my frame"); //对frame进行基本设置。 f.setBounds(300,100,600,500); f.setLayout(new FlowLayout()); but = new Button("my button"); //将组件添加到frame中 f.add(but); //加载一下窗体上事件。 myEvent(); //显示窗体; f.setVisible(true); } private void myEvent() { f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); //让按钮具备退出程序的功能 but.addActionListener(new ActionListener() { private int count = 1; public void actionPerformed(ActionEvent e) { Button b = (Button)e.getSource(); Frame f1 = (Frame)b.getParent(); f1.add(new Button("button-"+count++)); f1.validate(); } }); } public static void main(String[] args) { new FrameDemo(); } } </span>
菜单继承体系:
菜单:
MenuBar(菜单栏),Menu(菜单),MenuItem(菜单条目)
先创建菜单条,再创建菜单,每一个菜单 中建立菜单项。
也可以菜单添加到菜单中,作为子菜单。
通过setMenuBar()方法,将菜单添加到Frame中。
如以下例子:
<span style="font-size:12px;">import java.awt.*; import java.awt.event.*; class MyMenuDemo { private Frame f; private MenuBar mb; private Menu m,subMenu; private MenuItem closeItem,subItem; MyMenuDemo() { init(); } public void init() { f = new Frame("my window"); f.setBounds(300,100,500,600); f.setLayout(new FlowLayout()); mb = new MenuBar(); m = new Menu("文件"); subMenu = new Menu("子菜单"); subItem = new MenuItem("子条目"); closeItem = new MenuItem("退出"); subMenu.add(subItem); m.add(subMenu); m.add(closeItem); mb.add(m); f.setMenuBar(mb); myEvent(); f.setVisible(true); } private void myEvent() { closeItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } public static void main(String[] args) { new MyMenuDemo(); } } </span>