------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
第十三章: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、事件监听由事件源、事件、监听器等因素组成,事件源即组件,当组件被用户进行特定操作时,就会产生特定事件,如果该组件添加了特定的事件监听则事件监听器就能监听到该事件,从而触发程序员编写的指定操作,这样就形成了一套完整的事件监听机制。
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------