本章概述:
第一部分: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、事件监听由事件源、事件、监听器等因素组成,事件源即组件,当组件被用户进行特定操作时,就会产生特定事件,如果该组件添加了特定的事件监听则事件监听器就能监听到该事件,从而触发程序员编写的指定操作,这样就形成了一套完整的事件监听机制。