黑马程序员————java基础之GUI

来源:互联网 发布:在线课程网络课程 编辑:程序博客网 时间:2024/06/05 03:47

-----------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>


 

 

 

 

0 0