---------android培训、java培训、期待与您交流! ----------
一:GUI概述:
(一) Graphiccl User Interface (图形用户接口),就是用图形的方式来显示计算机操作的界面,这样更方便直观;
(二)CLI :Commend line User Interface(命令行用户接口),就是常见的Dos命令行操作,需要记忆一些常用的命令,操作不直观;
(三) Awt 和Swing:
(1):java.Awt:Abstract Window Tooi(抽象窗口工具包),需要调用本地系统方法实现功能;属重量级控件;
(2):java.Swing:在AWT 的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由java实现。增强了移植性,属轻量级控件;
(四) Container :为容器,是一个特殊的组件,该组件可以通过add方法添加其他组件进来;
二:布局管理器:就是用于在容器中的组件的排序方式;
(一)常见的布局方式有如下:
(1)FloWLayout流式布局:特点
从左到右的顺序排序,Panel默认的布局管理器;
(2)BorderLayout (边界布局管理器)特点:
从:东、南、西、北、中、 的方式布局:Frame默认的布局管理器;
(3):GridLayout (网格布局管理器)特点是:规则的矩阵
(4):CardLayout (卡片布局管理器):选项卡;
(5) GridBaglayout (网格包布局管理器):非规则的矩阵;
三:创建图形化界面
(一):基本流程:
1:创建Frame窗体;
2:对窗体进行基本设置;
3:定义组件;
4:将组件通过窗体的add方法添加到窗体中;
5:让窗体显示,通过setVisible(true)方法;
(二)事件监听机制:包括事件源(组件)----->事件(Event)-------->监听器(Listener)---------->事件处理(引发事件后的处理方式)
1:事件源就是awt包或者swing包中的那些图形界面组件;
2:事件就是每一个事件源都有自己特有的对应事件和共性事件;
3:监听器就是将可以触发某一个事件的动作(但不指一个动作)都已经封装到了监听器中;listener
以上三者在java中都已经定义好了,直接获取其对象来用就可以了;而最后要做的处理就是对产生的动作进行处理了;
(三)窗体监听事件:
(1)ActionListener:用于接收操作事件的侦听器接口。对处理操作事件感兴趣的类可以实现此接口,而使用该类创建的对象可使用组
件的addActionListener
方法向该组件注册。在发生操作事件时,调用该对象的actionPerformed
方法。
(2) WindowAdapter:用于接收窗口事件的侦听器接口。旨在处理窗口事件的类要么实现此接口(及其包含的所有方法),要么扩展
抽象类 WindowAdapter
(仅重写所需的方法)。然后使用窗口的addWindowListener
方法将从该类所创建的侦听器对象向该
Window 注册。当通过打开、关闭、激活或停用、图标化或取消图标化而改变了窗口状态时,将调用该侦听器对象中的相关方法,
并将 WindowEvent
传递给该方法。
(3)一般使用的是匿名内部类来实现。
(4)事件触发后会把事件打包成对象传给该变量,其中包括事件原对象通过getSource()或者是getComgonent()获取;
(四)Button按钮监听事件:
(1) 用于接收操作事件的侦听器接口。对处理操作事件感兴趣的类可以实现此接口,而使用该类创建的对象可使用组件的 addActionListener
方法向该组件注册。在发生操作事件时,调用该对象的 actionPerformed
方法。
(2)Button按钮支持一个监听事件就是:addActionListener;
(五)component构建监听事件:component 是一个具有图形表示能力的对象,可在屏幕上显示,并可与用户进行交互;
(1)addMouseListener:鼠标监听事件
添加指定的鼠标侦听器,以接收发自此组件的鼠标事件。
MouseListener:用于接收组件上“感兴趣”的鼠标事件(按下、释放、单击、进入或离开)的侦听器接口。(要跟踪鼠标移动和鼠标拖动,
请使用 MouseMotionListener
。) 旨在处理鼠标事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象类
MouseAdapter
(仅重写所需的方法)。
void | mouseClicked(MouseEvent e) 鼠标按键在组件上单击(按下并释放)时调用。 |
void | mouseEntered(MouseEvent e) 鼠标进入到组件上时调用。 |
void | mouseExited(MouseEvent e) 鼠标离开组件时调用。 |
void | mousePressed(MouseEvent e) 鼠标按键在组件上按下时调用。 |
void | mouseReleased(MouseEvent e) 鼠标按钮在组件上释放时调用。 |
鼠标共有如下事件:
1: 鼠标事件 :按下鼠标按键, 释放鼠标按键, 单击鼠标按键(按下并释放) ,鼠标光标进入组件几何形状的未遮掩部分
鼠标光标离开组件几何形状的未遮掩部分
2:鼠标移动事件 :移动鼠标 ,拖动鼠标
3:双击事件:同过调用鼠标点击事件的:getClickCount()方法返回与此事件关联的鼠标单击次数。在做判断在做相应的处理即可;
(2)addKeyListener:键盘监听事件
添加指定的按键侦听器,以接收发自此组件的按键事件。如果 l 为 null,则不会抛出异常并且不执行动作。
构造函数;
1:keyPressed(KeyEvent e) 按下某个键时调用此方法。
2:keyReleased(KeyEvent e) 释放某个键时调用此方法
3:keyTyped(KeyEvent e) 键入某个键时调用此方法。
构造方法:
getKeyChar 方法总是返回有效的 Unicode 字符或 CHAR_UNDEFINED;
getKeyCode 方法可指出按下或释放的键,该方法返回一个虚拟键码。
getKeyText(int keyCode) 返回描述 keyCode 的 String,如 "HOME"、"F1" 或 "A"。
4:组合健事件:isControlDown:用与判断那个健被按下:例如:(e.isControlDown && e.getKeyCode==KeyEvent.VK_A)就等于是按下了Ctrl 健和A 健;
后引发要处理的程序;
5:InputEvent 所有组件级别输入事件的根事件类。 输入事件通常由产生输入事件的源代码进行处理,而在此之前,将他们提交到侦听器中。
public void consume() 使用此事件,以便不会按照默认的方式由产生此事件的源代码来处理此事件使用此事件,以便不会按照默认的方式由产生此事件的
源代码来处理此事件。
如下示例:
public class test_Frame {
//定义一个窗体所需组件
private Frame f;
private Button bt; //按钮
private TextField tf;
public void show(){
f=new Frame("第一个窗体");//创建一个窗体
f.setBounds(100,100,500,400);//定义窗体的出现的位置是按显示位置左 ,上 /窗体的大小宽 高;
f.setLayout(new FlowLayout() );//定义窗体的显示的布局是使用的那一种管理器
tf=new TextField(20);
f.add(tf);
bt=new Button("按钮");//定义一个按钮
f.add(bt);//将一个按钮添加到窗体中,按窗体的布局显示
frame_Event();//调用窗体的关闭事件
f.setVisible(true);//调用窗体显示的方法
}
public void frame_Event(){
//调用窗体事件在定义一个内部类窗体事件的子类并覆盖其子类的关闭方法进行处理事件;
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
//按钮的鼠标事件MouseListener
bt.addMouseListener(new MouseAdapter(){
int i=0;
//鼠标的进入事件;
public void mouseEntered(MouseEvent e){
System.out.println(i++);
}
//鼠标点击的事件方法
public void mouseClicked(MouseEvent e) {
System.out.println("点击动作");
}
});
//鼠标双击事件的方法
bt.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
if(e.getClickCount()==2){
System.out.println("双击事件");
}
}
});
//鼠标左右健区分使用getButton方法
bt.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e){
if(e.getButton()==1){
System.out.println("左");
}else if(e.getButton()==2){
System.out.println("中");
}else if(e.getButton()==3){
System.out.println("右");
}
}
});
//键盘监听事件
bt.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e) {
//用于判断按下了键盘中的那个健;
if(e.getKeyCode()==KeyEvent.VK_A){
System.out.println("按下了A健");
}
//键盘组合健通过isControlDown()判断按下了某个健来判断e.getKeyCode()==KeyEvent.VK_ENTER
if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER){
System.exit(0);
}
}
});
//向文本框中添加键盘监听事件
tf.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e) {
if(!(e.getKeyCode()>=KeyEvent.VK_0 && e.getKeyCode()<=KeyEvent.VK_9)){
System.out.println("输入的非数字!");
e.consume();//在键盘灯输入类中的该方法用于判断如果与判断的不符合就不存进text中
}
}
});
}
}
四:菜单栏
(一):MenuBar 类封装绑定到框架的菜单栏的平台概念。为了将该菜单栏与 Frame
对象关联,可以调用该框架的setMenuBar
方法。
(二) :Menu 对象是从菜单栏部署的下拉式菜单组件。 菜单中的每一项都必须属于 MenuItem
类。它可以是MenuItem
的一个实例、子菜单(Menu
的一个
实例)、或复选框(CheckboxMenuItem
的一个实例)。
(三):MenuItem 菜单中的所有项必须属于类 MenuItem
或其子类之一。 默认的 MenuItem
对象包含一个简单的加标签的菜单项。
(四):FileDialog 类显示一个对话框窗口,用户可以从中选择文件。由于它是一个模式对话框,当应用程序调用其 show
方法来显示对话框时,它将阻塞其余应用
程序,直到用户选择一个文件。
(1) 构造函数: FileDialog(Frame parent,String title, int mode) 创建一个具有指定标题的文件对话框窗口,用于加载或保存文件。
如果 mode
的值为 LOAD
,那么文件对话框将查找要读取的文件,所显示的文件是当前目录中的文件。如果mode
的值为SAVE
,则文件对话框将查找要写
入文件的位置。
(2)获取选中文件的路径的方法:getDirectory() 获取此文件对话框的目录。
(3)获取选中的文件名:getFile() 获取此文件对话框的选定文件。
(4)setDirectory(String dir) 将此文件对话框窗口的目录设置为指定目录。
(5) setFile(String file) 将此文件对话框窗口的选定文件设置为指定文件。
如示例:
class TextFile{
public TextFile(){
show();
}
private Frame f;
private MenuBar mb;
private Menu me,men,menu;
private MenuItem mi,mit,mitex ;
private TextArea ta;
private FileDialog fd,load;
private File file;
private BufferedReader br;
private BufferedWriter bw;
public void show(){
f =new Frame("文本");
f.setBounds(300, 100, 600, 550);
ta=new TextArea();
f.add(ta);
mb=new MenuBar();
f.setMenuBar(mb);
me=new Menu("文件");
men=new Menu("编辑");
menu=new Menu("不保存");
mi=new MenuItem("保存");
mit=new MenuItem("打开");
mitex=new MenuItem("退出");
mb.add(me);
me.add(menu);
mb.add(men);
menu.add(mi);
me.add(mit);
me.add(mitex);
events();
misave();
mitload();
f.setVisible(true);
}
public void misave(){//保存文件的方法
mi.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
load=new FileDialog(f,"保存文件",FileDialog.SAVE);//文件保存的对象
if(file==null){//当文件不为空时就弹出保存对话框
load.setVisible(true);
String paths=load.getDirectory();//获取文件路径及文件名
String names=load.getFile();
if(paths==null||names==null){
return;
}
file=new File(paths,names);
}
try {
bw=new BufferedWriter(new FileWriter(file));//创建字符写入流
String len=ta.getText();//获取数据并写入
bw.write(len);
bw.flush();
} catch (IOException e1) {
throw new RuntimeException("写入数据异常!");
}
finally{
if(bw!=null){
try {
bw.close();
} catch (Exception e2) {
throw new RuntimeException("关闭写入数据异常!");
}
}
}
}
});
}
public void mitload(){//打开文件的方法
mit.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent e) {
fd=new FileDialog(f, "打开文件",FileDialog.LOAD);
fd.setVisible(true);
String path=fd.getDirectory();//通过FileDialog对象的方法获取打开文件的路径
String name=fd.getFile();//获取打开文件的名字
if(path==null || name==null){//如果没有选择文件就直接返回
return;
}
ta.setText("");
file=new File(path,name);//
try {
br=new BufferedReader(new FileReader(file));
String len=null;
while((len=br.readLine())!=null){
ta.append(len+"\r\n");//使用append方法将数据存储数据
}
} catch (IOException ex) {
throw new RuntimeException("读取数据异常!");
}
finally{
if(br!=null){
try {
br.close();
} catch (IOException ex) {
throw new RuntimeException("读取数据异常!");
}
}
}
}
});
}
public void events(){
mitex.addActionListener(new ActionListener() {//退出按钮的事件
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
f.addWindowListener(new WindowAdapter() {
public void windowClosing( WindowEvent e){
System.exit(0);
}
});
}
}
---------android培训、java培训、期待与您交流! ----------