本章概述:

第一部分: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、组件构成体系:

java 比ui有发展吧 java与ui_计算机

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