黑马程序员——java基础(GUI)

时间:2023-01-27 12:12:56

------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、组件构成体系

黑马程序员——java基础(GUI)

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、事件监听视图:

黑马程序员——java基础(GUI)

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培训、期待与您交流! -------