------- android培训、java培训、期待与您交流! ----------
一.概述
1.GUI:Graphical User Interface 图形用户接口。
用图形的方式,来显示计算机操作的界面,这样更方便更直观。
2.CLI:Commond line User Interface命令行用户接口。
就是常见的Dos命令行操作。
需要记忆一些常用的命令,操作不直观。
3.Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中。
java.Awt:Abstract Window Toolkit抽象窗口工具包,需要调用本地系统的方法实现功能,和系统的依赖性稍强,属于重量级控件。Awt包中主要的四个类:
组建类(Component),容器类(Container),图形类(Graphics),布局管理器类(Layoutmanager和LayoutManager2)。
javax.Swing:在Awt的基础上,建立的一套图形界面系统,其中提供了更过的组件,完全由java实现,增强了移植性,属于轻量级控件。
4.继承关系图
Container:为容器,是一个特殊的组件,该组件中可以通过add 方法添加其他组件进来。
Container常用子类:Window Panel(面板,不能单独存在。)
Window常用子类:Frame Dialog。
二.布局管理器
1.布局:就是容器中的组件的排放方式。
2.常见的布局管理方式:
FlowLayout(流式布局管理器)从左到右的顺序排列,Panel默认的布局管理器。
BorderLayout(边界布局管理器)东,南,西,北,中,Frame默认的布局管理器。
GridLayout(网格布局管理器)规则的矩阵。
CardLayout(卡片布局管理器)选项卡。
GridBagLayout(网格包布局管理器)非规则的矩阵。
三.创建图形化界面
1.创建frame窗体。
2.对窗体进行基本设置。
3.定义组件。
4.将组件通过窗口的add()方法添加到窗体中。
5.让窗体显示,通过setVisible(true)。
代码:
import java.awt.*;
public class AwtDemo {
public static void main(String[] args) {
// 创建frame窗体,窗体的标题为my awt
Frame f = new Frame("my awt");
// 设置窗体的大小
f.setSize(200, 300);
// 设置窗体的显示位置
f.setLocation(200, 200);
// 设置窗体的布局
f.setLayout(new FlowLayout());
// 创建按钮组件,可以定义按钮显示的内容
Button b = new Button("按钮");
// 将组件添加到窗体中
f.add(b);
// 设置窗体的可见性
f.setVisible(true);
}
}
四.事件监听机制
1.组成:
事件(Event) 事件源 监听器(Listener) 事件处理
2.特点:
事件源:就是Awt包中或者Swing包中的那些图形用户界面组件。
事件:每一个事件源都有自己特有的对应事件和共性事件。(鼠标事件,键盘事件)
监听器:将可以出发某一事件的动作(不止一个)封装到监听器中。
事件处理:引发事件后处理方式。就是与用户的交互行为。
3.事件监听机制流程图
4.注意:
事件源,事件,监听器在java中已经定义好了,我们只需要做的就是事件处理。
5.步骤:
a.确定事件源。
b.通过事件源对象的addXXXListener()方法将监听器注册到该事件源上。该方法中接收XXXListener的子类对象,或者XXXListener
的子类XXXAdapter的子类对象。
一般用匿名内部类来表示。方法的参数一般是XXXEvent类型的变量接收。
代码:
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);//程序退出
}
public void WindowActivated(WindowEvent e)
{
System.out.println("我活了");
}
public void WindowOpened(WindowEvent e)
{
System.out.println("我被打开了");
}
});
注意:
事件触发后会把事件打包成对象传递给该变量。(其中包括事件源对象。通过getSource()或者,getComponent()获取。)
五.键盘 鼠标事件
代码:
import java.awt.*;
import java.awt.event.*;
//键盘 鼠标事件
class MouseAndKeyEvent
{
//定义该图形中所需的组件的引用。
private Frame f;
private Button but;
private TextField tf;
//构造函数,初始化对象
MouseAndKeyEvent()
{
init();
}
public void init()
{ //创建窗体,窗体的标题为my frame
f = new Frame("my frame");
//设置窗体的边框和布局格式
f.setBounds(300,100,600,500);
f.setLayout(new FlowLayout());
//定义组件
tf = new TextField(20);
but = new Button("my button");
//将组件添加到窗体中
f.add(tf);
f.add(but);
//加载事件
myEvent();
//设置窗体显示
f.setVisible(true);
}
//注册事件
private void myEvent()
{ //为窗体添加事件监听
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);//程序退出
}
});
//为tf添加键盘监听
tf.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
int code = e.getKeyCode();
if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9))
{
System.out.println(code+".....是非法的");
e.consume();
}
}
});
//给But添加一个键盘监听。
but.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER)
System.exit(0);
System.out.println("ctrl+enter is run");
}
});
//为but添加鼠标监听
but.addMouseListener(new MouseAdapter()
{
private int count = 1;
private int clickCount = 1;
public void mouseEntered(MouseEvent e)
{
System.out.println("鼠标进入到该组件"+count++);
}
public void mouseClicked(MouseEvent e)
{
if(e.getClickCount()==2)
System.out.println("双击动作"+clickCount++);
}
});
}
public static void main(String[] args)
{
new MouseAndKeyEvent();//创建对象,使程序运行
}
}
六.菜单 FileDialog的使用
1.继承体系
Menu:菜单,继承MenuItem;有右三角的图标存在,可添加Menu和MenuItem
MenuBar:菜单条,可添加菜单和菜单项。
MenuItem:菜单项,无右三角的图标存在,是最终的菜单项。
2.使用
先创建菜单条,再创建菜单,每一个菜单 中建立菜单项。
也可以菜单添加到菜单中,作为子菜单。
通过setMenuBar()方法,将菜单添加到Frame中。
代码:
/*
打开文件 保存文件
打开: FileDialog 注意模式 LOAD SAVE
关键在如何获取选中的文件 getFile方法
用流对文本数据进行操作 */
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class MyMenuTest {
//定义该图形中所需的组件的引用。
private Frame f;
private MenuBar mb;
private TextArea ta;
private Menu fileMenu;
private MenuItem openitem,saveitem,closeitem;
private FileDialog openDia,saveDia;
private File file;
//构造函数
MyMenuTest()
{
init();
}
public void init()
{ //创建窗体
f = new Frame("my window");
f.setBounds(300,100,650,600);
//定义组件
mb = new MenuBar();
ta = new TextArea();
fileMenu = new Menu("文件");
openitem = new MenuItem("打开");
saveitem = new MenuItem("保存");
closeitem = new MenuItem("退出");
//将菜单条添加到窗体中
f.setMenuBar(mb);
//将文本区域组件添加到窗体中
f.add(ta);
//将菜单项添加到菜单中
fileMenu.add(openitem);
fileMenu.add(saveitem);
fileMenu.add(closeitem);
//将菜单添加到菜单菜单条中
mb.add(fileMenu);
//创建文件对话框组件
openDia=new FileDialog(f,"我要打开",FileDialog.LOAD);
saveDia=new FileDialog(f,"我要保存",FileDialog.SAVE);
//加载事件
myEvents();
f.setVisible(true);
}
//注册事件
public void myEvents()
{ //为saveitem添加事件监听
saveitem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{ //显示对话框
saveDia.setVisible(true);
//获取目录
String dirPath=openDia.getDirectory();
//获取文件名
String fileName=openDia.getFile();
if(dirPath==null || fileName==null)
return;
//创建文件对象
file=new File(dirPath,fileName);
try{
BufferedWriter bufw=new BufferedWriter(new FileWriter(file));
String text=ta.getText();
bufw.write(text);
关闭
bufw.close();
}
catch(IOException ex)
{
throw new RuntimeException("文件保存失败");
}
}
});
//为openitem添加事件监听
openitem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
openDia.setVisible(true);
String dirPath=openDia.getDirectory();
String fileName=openDia.getFile();
if(dirPath==null || fileName==null)
return;
ta.setText("");//清空
file=new File(dirPath,fileName);
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)
{
throw new RuntimeException("文件读取失败");
}
}
});
//为closeitem添加事件监听
closeitem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
//窗体事件监听
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
public static void main(String[] args) {
new MyMenuTest();//创建对象,让程序运行
}
}