------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! -------
图形用户接口GUI(GraphicalUser Interface)
GUI用图形的方式,来显示计算机操作的界面,这样更方便更直观.
CLI(Command line User Interface)命令行用户接口,就是常见的Dos命令行操作,需要记忆一些常用的命令,操作不直观.比如:创建文件夹,或者删除文件夹等.
Java为GUI提供的对象都存在java.Awt和java.Swing两个包中.
java.Awt:Abstract Window ToolKit(抽象窗口工具包),需要调用本地方法来实现功能.属重量级控件.有些依赖平台,跨平台效果不佳.
java.Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Jaca实现.增强了移植性,属轻量级控件,用它的开发的图形界面能在任何系统下运行保持一致.跨平台性强.
继承关系图
Container:容器,是一个特殊的组件,该组件中可以通过add方法添加其它组件.容器中的组件的排放方式就是布局.
常见的布局管理器:
FlowLayout(流式布局管理器)从左到右的顺序排列,Paner默认的布局管理器.
BorderLayout(边界布局管理器)东南西北中,Frame默认的布局管理器.
GridLayout(网格布局管理器)规则的矩阵.
GridBagLayout(网格包布局管理器)非规则矩阵.
CardLayout(卡片式布局管理器)选项卡.
练习:
importjava.awt.*;
importjava.awt.event.*;
public class FrameDemo
{
public static void main(String[] args)
{
//创建一个窗体
Frame frame = new Frame("我的窗体");
// 设置窗体的长度(横坐标)为300,宽度(纵坐标)为200
frame.setSize(300, 200);
// 设置窗体弹出来时的位置
frame.setLocation(200, 300);
// 设置窗体的布局
frame.setLayout(new FlowLayout());
// 为窗体添加一个button按扭
Button btn = new Button("这是一个按扭");
frame.add(btn);
/*
* 如果没有处理该事件,那么窗体将不能关闭
//单击关闭事件
frame.addWindowListener(newWindowAdapter()
{
// 重写WindowAdapter的windowClosing方法
public voidwindowClosing(WindowEvent e)
{
// 关闭窗体,也就是停止程序
System.exit(0);
}
});
*/
// 设置窗体可见
frame.setVisible(true);
}
}
以上代码运行后,出现的窗体当点击关闭的时候,却没有反应.这是因为没有运行该事件处理的方法.如果把
frame.addWindowListener(newWindowAdapter()
{
// 重写WindowAdapter的windowClosing方法
public void windowClosing(WindowEvent e)
{
// 关闭窗体,也就是停止程序
System.exit(0);
}
});
这个方法的注释去掉再运行,那么窗体就能正常关闭.
事件监听机制的特点:
1. 事件源:就是awt包或者swing包中的那些图形界面组件
2. 事件;每一个事件源都有自己的对应事件和共性事件
3. 监听器:将可以触发某一个事件的动作(不只一个动作)封装在一起.
4. 事件处理:对某一事件产生的动作进行处理.
前三都在java中已经定义.而我们要做的就是”事件的处理”.
/*
* 练习:
* 鼠标和键盘的一些事件
*
*/
importjava.awt.*;
import java.awt.event.*;
public class MouseAndKeyEvent
{
private Framef =null;
private Buttonb =null;
private TextFieldtf =null;
//构造方法
public MouseAndKeyEvent()
{
init();
}
// 程序开始运行窗体就且有一些设置
public void init()
{
/*
* 设置窗体的基本属性
*/
f = new Frame("MyFrame");
b = new Button("MyButton");
//被始化为10列的空文本
tf = new TextField(10);
//设置为20列的空文本
tf.setColumns(20);
f.setBounds(100, 100, 400, 260);
f.setLayout(new FlowLayout());
f.setVisible(true);
this.myEvent();
//添加组件到窗体中
f.add(tf);
f.add(b);
}
// 把事件处理封装到一个方法里
public void myEvent()
{
// 设置窗体关闭事件
f.addWindowListener(newWindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
// 组件活动事件,在组件被操作的时候触发该事件(比如:单击,双击.不包括进入事件,离开事件.因为必须是该组件被操作)
b.addActionListener(newActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.out.println("组件活动了!");
}
});
// 鼠标进入到组件事件
b.addMouseListener(newMouseAdapter()
{
public void mouseEntered(MouseEvent e)
{
System.out.println("鼠标进入组件!");
}
});
// 鼠标离开组件事件
b.addMouseListener(newMouseAdapter()
{
public void mouseExited(MouseEvent e)
{
System.out.println("鼠标离开组件!");
}
});
// 鼠标点击处理事件
b.addMouseListener(newMouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
System.out.println("点击鼠标!");
}
});
// 按下某个键盘时button组件(该组件必须为当前组件)的事件处理
// 不会处理组件活动事件(ActionListener)
// 只有该组件被单击或双击,或形成单击双击效果时,才会触发组件活动事件
b.addKeyListener(newKeyAdapter()
{
public void keyPressed(KeyEvent e)
{
// 按下Ctrl()键+Enter(回车)运行....
if (e.isControlDown() && e.getKeyCode()== KeyEvent.VK_ENTER)
{
System.out.println("Ctrl + Enter is run....");
}
// 当按Esc键时退出程序
if (e.getKeyCode() == KeyEvent.VK_ESCAPE)
{
System.exit(0);
}
// 调用键盘事件的方法
System.out.println("按下 " +KeyEvent.getKeyText(e.getKeyCode()) +"键!" + "编码数字:" + e.getKeyCode());
}
});
// 释放某个键盘事件处理
b.addKeyListener(newKeyAdapter()
{
public void keyReleased(KeyEvent e)
{
System.out.println("松开键盘!");
}
});
//向文本组件中写数字
tf.addKeyListener(newKeyAdapter()
{
public void keyPressed(KeyEvent e)
{
int code = e.getKeyCode();
//判断按键的值是不是数字,不是数字结束当前键盘事件的处理
if (!(code >= KeyEvent.VK_0 && code <= KeyEvent.VK_9))
{
System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"...是非法的!");
//使用此事件,以便不会按照默认的方式由产生此事件的源代码来处理此事件。
e.consume();
}
}
});
}
public static void main(String[] args)
{
new MouseAndKeyEvent();
}
}
练习:
/*
* 模拟记事本的读写
*/
importjava.awt.*;
importjava.awt.event.*;
importjava.io.*;
public class MenuDemo
{
private Frameframe;
private MenuBarmenuBar;
private MenufileMenu;
private MenuItemopenItem,saveItem,closeItem;
private TextAreatextArea;
private Filefile;
private FileDialogopenFileDialog,saveFileDialog;
String directoryPath;
String fileName;
public MenuDemo()
{
//初始化窗体
init();
}
public void init()
{
frame = new Frame("我的记事本");
menuBar = new MenuBar();
fileMenu = new Menu("文件");
openItem = new MenuItem("打开");
saveItem = new MenuItem("保存");
closeItem = new MenuItem("退出");
textArea = new TextArea();
openFileDialog = new FileDialog(frame,"打开文件", FileDialog.LOAD);
saveFileDialog = new FileDialog(frame,"保存文件", FileDialog.SAVE);
//设置窗体出现的位置
openFileDialog.setLocation(200, 200);
saveFileDialog.setLocation(200, 200);
frame.setBounds(200, 50, 600, 300);//基本设置,采用默认布局器
//添加组件
menuBar.add(fileMenu);
fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.add(closeItem);
frame.add(textArea);
frame.setMenuBar(menuBar);
frame.setVisible(true);
//加载事件监听
myEvent();
}
public void myEvent()
{
frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
closeItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
//退出程序
System.exit(0);
}
});
//按下ctrl+s键保存
textArea.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
if (e.isControlDown() && e.getKeyCode()== KeyEvent.VK_S)
{
saveFile();
}
}
});
// 保存文件事件
saveItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
//调用保存文件方法
saveFile();
}
});
// 打开文件事件
openItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
openFileDialog.setVisible(true);
//获取此文件对话框的目录
directoryPath =openFileDialog.getDirectory();
//获取此文件对话框的选定文件
fileName = openFileDialog.getFile();
if (directoryPath ==null ||fileName ==null)
return;
textArea.setText("");//清除textArea里面原有数据
file = new File(directoryPath,fileName);
// 判断该文件是否存在
if (file.exists())
{
BufferedReader br = null;
try
{
br = new BufferedReader(new FileReader(file));
String line = null;
while ((line = br.readLine()) !=null)
{
textArea.append(line +"\r\n");
}
}
catch (Exception e2)
{
e2.printStackTrace();
}
finally
{
try
{
if (br !=null)//关闭缓冲
br.close();
}
catch (Exception e3)
{
e3.printStackTrace();
}
}
}
else
{
System.out.println("该文件不存在!");
openFileDialog.setVisible(true);
}
}
});
}
//封装保存文件代码
public void saveFile()
{
if (file ==null)
{
// 显示保存对话框
saveFileDialog.setVisible(true);
directoryPath = saveFileDialog.getDirectory();
fileName = saveFileDialog.getFile();
if (directoryPath ==null ||fileName ==null)
return;//跳出该方法
file = new File(directoryPath,fileName);
}
BufferedWriter bw = null;
try
{
bw = new BufferedWriter(new FileWriter(file));
String text = textArea.getText();
bw.write(text);
bw.flush();
}
catch (Exception e2)
{
e2.printStackTrace();
}
finally
{
try
{
if (bw !=null)
bw.close();
}
catch (Exception e3)
{
e3.printStackTrace();
}
}
}
//程序入口
public static void main(String[] args)
{
new MenuDemo();
}
}