java基础——第十三章:java基础(GUI)

本章概述:

第一部分:GUI构成

第二部分:GUI实现

第三部分:事件监听

 

 

 

 

 

第一部分:GUI构成

1、GUI概述:

GUI即Graphical User Interface(图形化用户界面)区别于CUI(Command User Interface,命令行用户接口)

CUI: Command User Interface,命令行用户接口,即常见的Dos命令行操作,须记住一些命令,操作不直观

GUI: Graphical User Interface,图形用户接口,用图形方式,来显示计算机操作界面,方便直观。

JavaGUI对象包

java.AWT 调用本地方法实现功能,属于重量级控件

javax.Swing 基于AWT的基础上,建立的一套图形界面系统,其中提供了更多组件,而且完全由java实现,增强移植性,属轻量级组件

2、组件构成体系:

Container:容器,是一个特殊的组件,该组件中可以通过add方法添加其他组件进来。

Container常用子类:Window   Panel(面板,不能单独存在。)

 

3、布局管理器:

容器组件的排放方式就是布局

常见的布局管理器:

FlowLayout 流式布局 

BorderLayout 边界布局(Frame默认的布局管理器)

GridLayout 网格布局(规则矩阵)

GridBagLayout 网格包布局(非规则矩阵)

CardLayout 卡片布局(选项卡 )

如果存在多种布局方式,如何创建窗体界面呢?

步骤:

先将窗体Frame进行大区域的划分,设置其布局管理器,加入面板Panel
将组件加入Panel,设置面板的布局管理器。

 

 

 

 

 

第二部分:GUI的实现

1、创建GUI步骤:

创建Frame窗体

对窗体进行基本设置(大小、位置、布局)

定义组件

将组件通过add方法添加到窗体

添加事件监听器

让窗体显示(通过setVisible方法)

2、Frame

窗体类,是window下的最常用的子类,用于创建图形化用户界面窗体

window是contianer的子类,contianer是组件类,但该体系有一个特点,可以在该体系的对象中添加其他组件

方法

setVisible 显示窗体

bounds  设置窗体大小

add 添加组件

setLayout 设置布局

 

 

3、代码示例:

 

 

/*
创建图形化界面:(未演示事件监听)
1,创建frame窗体。
2,对窗体进行基本设置。
	比如大小,位置,布局。
3,定义组件。
4,将组件通过窗体的add方法添加到窗体中。
5,让窗体显示,通过setVisible(true)

*/

//需要导入AWT图形化组件包
import java.awt.*;

//用AWT中的组件创建图形化用户界面
class GUIDemo 
{
	public static void main(String[] args) 
	{
		//创建一个窗体,窗体命名GUI
		Frame f = new Frame("my GUI");

		//对窗体进行设置
		f.setSize(500,400);   //设置窗体大小(宽度,高度)
		f.setLocation(300,200);	   //设置窗体的显示位置
		f.setLayout(new FlowLayout());   //设置窗体的布局为流式布局(默认为边界布局)

		//创建一个按钮组件
		Button b = new Button("我是按钮");

		//将按钮组件添加到窗体中
		f.add(b);

		//显示窗体(在显示窗体方法中传入参数“true”)
		f.setVisible(true);
	}
}
 

 

 

 

 

 

第三部分:事件监听机制

1、组成:

事件源(组件):awt或swing包中的那些图形界面组件

事件  :  每一个事件源都有自己特有的对应事件和共性事件

监听器 :  将可触发某一事件的动作(不只一个动作),都封装到侦听器中。

事件处理 : 引发事件后的处理方式。

2、事件监听视图:

3、事件监听器

通常后缀带Listener的方法实现事件监听,这些方法参数需要传入一个监听器

监听器类:

WindowAdapter  窗体特有监听器,监听窗体的共性事件

ActionListener    活动监听器,监听组件活动

KeyListener    键盘监听器,监听键盘录入

MouseListener   鼠标监听器,监听鼠标的动作

4、Event类

活动监听(ActionEvent)  对组件的特定事件进行监听(比如按钮组件,按下则触发按钮事件)

鼠标监听(MouseEvent)  对鼠标事件进行监听

键盘监听 (KeyEvent)  对键盘输入进行监听

5、菜单

Menu(菜单)  该类对象可以添加MenuItem子菜单项

MenuBar(菜单栏)  用于封装菜单

MenuItem(菜单项)  可以封装具体菜单事件

6、jar包双击执行

javac -d 存放路径 java文件

jar -cvfm jar包名 配置清单 包

清单

Main-class: 包名.类名(回车)

空格和回车必须有

7、一个文本编辑器的简单示例:

 

/*
需求:简单文本编辑器:
思路:
	1、创建一个窗体
	2、向窗体添加菜单、文本域、滚动条等
	3、菜单中添加打开文件、保存文件退出等功能
	4、添加事件监听
	5、涉及到操作文件,要用到流机制,选择路径要使用到文件选项框
	6、制jar包,要将class文件封装到包里,用jar工具打jar包
步骤:
	1、定义组件
	2、调用方法对组件进行初始化
	3、初始化完成显示窗体,监听事件
	4、编译,打jar包
打jar包步骤:
	1,编译时将类封装到一个包(package)中。
	2,定义一个jar包的配置信息。
		定义一个文件a.txt。文件内容为:Main-Class:(空格)包名.类名(回车)
	3,打jar包。
		打jar包命令:jar-cvfm jar包名.jar a.txt(配置信息) 包名
	4,通过WinRAR程序进行验证,查看该jar的配置文件中是否有自定义的配置信息。
	5,通过工具--文件夹选项--文件类型--jar类型文件,通过高级,定义该jar类型文件的打开动作的关联程序。
		jdk\bin\javaw.exe-jar
	6,双击jar文件运行程序。

*/

package myedit;

//导包,这里我使用轻量化的swing中的组件
import javax.swing.*;
import java.awt.event.*;
import java.io.*;

/*public */class EventDemo 
{
	public static void main(String[] args) 
	{
		//创建一个本类对象
		new EventDemo();
	}

	//定义本类成员变量
	private JFrame f;  //窗体
	private JMenuBar bar;  //菜单栏
	private JMenu fileMenu,editMenu;  //菜单
	private JMenuItem openItem,saveItem,closeItem;  //菜单项
	private JScrollPane scroll;  //滚动条
	private JTextArea ta;  //文本域
	
	//选择文件消息窗
	private JFileChooser dialog;

	//创建文件对象
	private File file;

	//构造函数调用init方法对这些对象初始化
	EventDemo()
	{
		init();
	}

	//init方法
	public void init()
	{
		f = new JFrame("my Edit");  //窗体,窗体名称
		f.setBounds(300,70,550,600);  //出现的位置x、y,窗体的宽、高

		bar = new JMenuBar();  //菜单栏

		//菜单
		fileMenu = new JMenu("文件");  
		editMenu = new JMenu("编辑");

		//子菜单项
		openItem = new JMenuItem("打开");
		saveItem = new JMenuItem("保存");
		closeItem = new JMenuItem("退出");

		scroll = new JScrollPane();  //滚动条
		ta = new JTextArea();  //文本域

		//将菜单项添加到菜单中
		fileMenu.add(openItem);
		fileMenu.add(saveItem);
		fileMenu.add(closeItem);
		bar.add(fileMenu);  //将菜单添加到菜单栏中
		bar.add(editMenu);


		f.setJMenuBar(bar);  //将菜单栏添加到窗体中

		//创建文件选择消息框
		dialog = new JFileChooser();

		//在滚动条面板中封装文本域,将滚动条面板添加到窗体中
		scroll.setViewportView(ta);
		f.add(scroll);    

		myEvent();  //该方法开启事件监听

		f.setVisible(true);  //显示窗体
	}

	//封装了事件监听的方法
	private void myEvent()
	{
		//调用添加监听器的方法,参数传入一个匿名内部对象
		saveItem.addActionListener(new ActionListener()
		{
			//复写父类的actionPerformed方法
			public void actionPerformed(ActionEvent e)// performed执行
			{
				//如果File为空,则显示消息框,选择文件路径
				if(file == null)
				{
					dialog.showOpenDialog(f);

					file = dialog.getSelectedFile();  //该方法属于阻塞式方法,未选择文件则一直阻塞
				}

				try
				{
					//开一个字符写入流,将在文本域中编辑好的文本写入流的目的地中(即上面选择的路径)
					BufferedWriter bufw = new BufferedWriter(new FileWriter(file));
					
					String text = ta.getText();    //该方法获取文本域中的文本

					bufw.write(text);
					//bufw.flush();
					bufw.close();
				}
				catch (IOException ex)    //IO异常处理
				{
					throw new RuntimeException("保存失败");
				}
			}
		});

		//给菜单中的保存选项添加监听
		openItem.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				//获取文件路径(以文件对象的形式返回)
				dialog.showOpenDialog(f);

				file = dialog.getSelectedFile();

				ta.setText("");    //要做这步动作,将原有文本域中的文本清空

				try
				{
					//用字符流将文本文件写入到文本域中
					BufferedReader bufr = new BufferedReader(new FileReader(file));

					String line = null;
					
					while((line = bufr.readLine())!=null)
					{
						ta.append(line+"\r\n");  //追加文本到文本域中
					}
					bufr.close();
				}
				catch (IOException ex)  //IO异常
				{
					throw new RuntimeException("读取失败");
				}
			}
		});

		//监听菜单中的退出项,发生事件直接退出
		closeItem.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.exit(0);  //这是System类中的退出系统的静态方法
			}
		});

		//监听窗体事件
		f.addWindowListener(new WindowAdapter()
		{
			//复写windowClosing方法,该方法监听窗体的退出按钮,触发则退出程序
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
	}
}
 

 

 

 

 

 

本章总结:

1、图形化用户界面具有简洁、易于用户操作等特点,是现代计算机发展的主流。

2、编程实现图形化用户界面需对容器、组件、布局管理器、事件监听等体系比较熟练,因为这些体系下的类和方法都比较丰富,只有熟练运用了才能在开发的过程中很好的控制好时间。

3、图形化用户界面中的容器也是一种组件,该组件的特点就是该组件允许在组件中添加组件;布局管理器可以实现对组件的布局,使组件在界面中的排布更美观易用,布局管理器中也可以添加布局管理器,但不能直接添加,需要在布局管理器中添加面板组件,再在面板组件中嵌入布局管理其,面板中还可以添加选项卡等其他组件;按钮、标签文本域、文本框、复选框等组件中不能添加组件,它们是实现功能的最小单元,可以给这些单元添加事件监听器,实现特定功能。

4、事件监听由事件源、事件、监听器等因素组成,事件源即组件,当组件被用户进行特定操作时,就会产生特定事件,如果该组件添加了特定的事件监听则事件监听器就能监听到该事件,从而触发程序员编写的指定操作,这样就形成了一套完整的事件监听机制。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值