转载请申明出处:http://blog.csdn.net/xmxkf/article/details/9795435

day22

01-GUI(概述)

GUI(图形用户界面)

1、 GUI(Griphical User Interface)图形用户接口

用图形的方式来显示计算机操作的界面,这样方便更直观。

2、 CLI(Command line User Interface)命令行用户接口

就是常见的Dos命令行操作,需要记忆一些常用的命令,操作不直观。

举例:比如:创建文件夹,或者删除文件夹等

JAVA为GUI提供的对象都存在于java.Awt和javax.Swing两个包中

3、Awt与Swing

java . Awt:Abstract Window ToolKit(抽象窗口工具包)。需要调用本地系统方法实现功能。属于重量级控件。

java .Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由java实现。强了移植性,属于轻量级控件

还有swt包,eclipse就是用他开发界面

、体系继承关系:

Component  组件

Container--|                |-- Button

Panel--|                         |-- Lable

Window --|                         |-- Checkbox

Frame--|   框架                         |-- TextComponent

Dialog --|                                                 |--TextArea

FileDialog--|                                                        |-- TextField

Container:是容器,是一个特殊的组件,该组件中可以通过add方法添加其他组件进来

02-GUI(布局)

1、布局管理器:容器中的组件的排列方式,就是布局。

2、常见的布局管理器:

FlowLayout(流式布局管理器) 从左到右的顺序排列。Panel默认的布局管理器。

BorderLayout(边界布局管理器)  东南西北中。Frame默认的布局管理器。

GridLayout(网格布局管理器)   计算器中的键  ;     规则的矩形。

CardLayout(卡片布局管理器) 选择卡。

GridBagLayout(网格包布局管理器)非规则的矩阵。

03-GUI(Frame)   一个简单窗体

建立一个简单的窗体:

Container常用子类:Window  Panel(面板不能单独存在)

Window常用子类:Frame  Dialog

简单的窗体创建过程:

import java.awt.*;

/*

* 创建图形化界面:

* 1,创建frame窗体

* 2,对窗体进行基本设置,比如大小,位置,布局

* 3,定义组件,让组件通过窗体的add方法添加到窗体中

* 4,让窗体显示,通过setVisible(true)

*/

public
class
AwtDemo

{

public
static void
main(String[]args)

{

Framef = new Frame("myawt");

f.setSize(500,400);     
//设置窗体大小

f.setLocation(300,200);  
//设置窗体出现在屏幕上的位置

f.setLayout(newFlowLayout());    //为窗体设置流式布局管理器

Buttonb = new Button("我是按钮");

f.add(b);     //添加按钮

f.setVisible(true);    //设置窗体可见

}

}

04-GUI(事件监听机制)

1、事件监听机制组成:

事件源(组件)                相当于c#中控件 (按钮)  btn_myBtn

事件(Event)                相当于按钮的点击事件(Click)

监听器(Listener)

相当于c#中委托 this.btn_myBtn.Click +=
new System.EventHandler(this.btn_myBtn_Click);

事件处理(引发事件后处理方式)相当于点击后的方法    btn_myBtn_Click()

2、事件源:就是awt包或者swing包中的那些图形界面组件;

事件:每个事件源都有自己特有的对应事件和共性事件;

监听器:将可以触发某一个事件的动作(不止一个动作)都已经封装到了监听器中;

以上三者在java中都定义好了。直接获取其对象来用就可以了。我们要做的事情就是对产生的动作进行处理。

理解:其实就是   事件源。Add监听器(new 监听器 {处理动作(事件 e){动作}});

事件源调用自己的方法添加监听器对象;监听器中封装了很多动作(方法),这些方法的参数是一个事件对象;当事件发生时,监听器对象中的方法会接受事件对象,并产生相应的动作,也就是处理动作(监听器类中的方法)

05-GUI(窗体事件)、

1、在java.awt.event包中封装了很多事件类和监听器类。当窗体添加了监听器的实例,监听器就可以监听窗体的很多事件,因为监听器中有很多相对应的方法,这些方法可以接受事件对象作为参数,当某事件产生就会调用相对应的方法,这样实现监听。

2、比如:

WindowListener用于接收窗口事件的监听器接口,里面封装了7个方法(敞口打开,关闭,活动等)。处理窗口事件的类要实现此接口并覆盖里面7个方法才能创建监听器对象,这是很不方便的。

WindowAdapter实现了此接口,并复写了7个方法,但是方法体都为空

Public voidwindowClosed(WindowEvent e){};创建它的对象也没有意义,所以干脆加上abstract,让它成为抽象类不能创建对象。处理窗口事件的类继承此抽象类后就可创建监听器对象。并且不用全部复写七种方法,需要哪个就覆盖那个。

3、窗口添加事件监听示例:

第一种方式:自定义外部监听器类继承WindowAdapter,

class MyWin
extends
WindowAdapter

{

public
void
windowClosing(WindowEvent e)

{

System.out.println(e.toString());

//java.awt.event.WindowEvent[WINDOW_CLOSING,opposite=null

//,oldState=0,newState=0] on frame0

System.exit(0);

}

}

f.addWindowListener(new MyWin());  //外部监听类对象

第二种方式:创建WindowAdapter子类匿名对象,复写其方法

f.addWindowListener(newWindowAdapter()   //匿名类监听器对象

{

//关闭事件发生时调用

publicvoidwindowClosing(WindowEvent e)

{

System.exit(0);

}

}

06-GUI(Action事件)

1、如果想要让按钮具备退出程序的功能:

按钮就是事件源。那么选择哪个监听器呢?

通过关闭窗口示例了解到,想要知道那个组件具备什么样的特有监听器,需要查看该组件对象的功能。通过查阅Button的描述,发现按钮支持一个特有监听addActionListener。

but.addActionListener(new ActionListener()

{

publicvoidactionPerformed(ActionEvent e)

{

System.out.println("退出,按钮干的");

System.exit(0);

}

});

2、发现ActionListener接口没有适配器ActionAdapter,因为此接口中只有一个抽象方法。适配器的作用是方便创建监听器对象,所以实现接口复写方法。其实没有适配器的监         听器接口是很少的,一般有3个以上方法的监听器都有对应适配器。

07-GUI(鼠标事件)

几乎所有组件都可添加鼠标和键盘监听器,所以,这两个监听器的添加方法在Component中活动监听器

but.addActionListener(new ActionListener()

{

publicvoidactionPerformed(ActionEvent e)

{

System.out.println("Actionok");

}

});

鼠标监听器

but.addMouseListener(new MouseAdapter()

{

privateint
count = 1;

privateint
clickCount=1;

//鼠标进入到组件上时调用

publicvoidmouseEntered(MouseEvent e)

{

System.out.println("鼠标进入到该组件"+count++);

}

//鼠标按键在组件上单击(按下并释放)时调用

publicvoidmouseClicked(MouseEvent e)

{

if(e.getClickCount()==2)   //点击事件对象的方法,获取点击次数

System.out.println("双击"+clickCount++);

}

});

08-GUI(键盘事件)

1、按钮添加键盘监听器:

but.addKeyListener(new KeyAdapter()

{//键盘按下事件

public
void
keyPressed(KeyEvent e)

{

if(e.isControlDown()&& e.getKeyCode()==KeyEvent.VK_ENTER)

System.out.println("Ctrl +enter is pressed");

//静态方法getKeyText(int keyCode)获取一个键的文本

//getKeyCode() 获取一个键关联的整数                       System.out.println(KeyEvent.getKeyText(e.getKeyCode())+""+e.getKeyCode());

}

});

2、文本框添加键盘监听事件(屏蔽键)

在KeyEvent事件类的父类InputEvent中有一个方法consume();

调用此方法以便不会按照默认的方式处理此事件

//文本框添加键盘监听器

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(e.getKeyText(code)+code+"……非法");

//使用此事件,以便不会按照默认的方式由产生此事件的源代码来处理此事件。

e.consume();  //默认是将按下的键添加到文本框中。注意这里不是将监听器删掉

}

}

});

09-GUI(练习-列出指定目录内容)           MyWindowDemo

需求:列出指定目录内容

分析:1、文本框TextField    按钮Button   文本区TextArea

2、当点击按钮时,获取文本框中路径封装成对象,

然后用Field类list方法列出路径中所有文件名,遍历追加到文本区

but.addActionListener(new ActionListener()

{

publicvoidactionPerformed(ActionEvent e)

{

StringdirPath =
tf.getText();

Filedir = new File(dirPath);  //将路径封装成抽象路径对象

if(dir.exists()&& dir.isDirectory())  //路径存在而且是目录

{

ta.setText("");  //如果存在且是目录,先清空文本区

String[]names = dir.list();        //列出目录下所有文件名

for(String name :names)

{

//将文本追加到文本区后面,而不是setText()

ta.append(name+"\r\n");

}

}                           }

}

});

10-GUI(对话框Dialog)

1、Dialog是Window的子类,modal - 指定在显示的时候是否阻止用户将内容输入到其他顶级窗口中(false , true)

他还有子类FileDialog(文件对话框)

2、FileDialog 类显示一个对话框窗口,用户可以从中选择文件;mode - 对话框的模式,FileDialog.LOADFileDialog.SAVE(打开和保存)

示例:  FileDialog openDia = newFileDialog(f,“打开”,FileDialog.LOAD);

 

//对话框(依照的窗体,对话框头名,模式),对话框也是窗体

//模式设置为true后,不处理对话框不能操作窗体f

d = new Dialog(f,"提示信息-self",true);

d.setBounds(400,200, 240, 150);

d.setLayout(new FlowLayout());

lab = new Label();

okBut = new Button("确定");

d.add(lab);

d.add(okBut);

//对话框添加事件监听

d.addWindowListener(new WindowAdapter()

{

publicvoidwindowClosing(WindowEvent e)

{

d.setVisible(false);

}

});

在上面例子中,当输入路径不存在时,弹出对话框:

else

{

lab.setText("输入的"+dirPath+"不存在,请重新输入");

d.setVisible(true);  //对话框可见

}

11-GUI(菜单)、 MyMenuDemo

MenuComponent

|-- MenuBar  菜单栏

|-- MenuItem  菜单项

|-- Menu 菜单

Menu是MenuItem子类,Menu中的add(MenuItem im)方法可以添加父类(菜单项)也可添加菜单,多态。可以理解:菜单项可以是个菜单(子菜单)

public
void
init()

{

f = new Frame("菜单");

f.setBounds(300,100, 500, 600);

f.setLayout(new FlowLayout());

mb = new MenuBar();    //菜单栏

m = new Menu("文件");   //菜单               
        文件

subMenu =
new
Menu("子菜单");                          子菜单> 子条目

ssubItem =
new
MenuItem("子条目");                      条目

subItem =
new
MenuItem("条目");                        退出

closeItem =
new
MenuItem("退出");

f.setMenuBar(mb); //窗体设置菜单栏

mb.add(m);            //菜单栏中添加菜单

m.add(subMenu);  //菜单中添加子菜单

subMenu.add(ssubItem); //子菜单中添加菜单项

m.add(subItem);    //菜单中添加菜单项

m.add(closeItem);  //菜单中添加菜单项

myEvent();

f.setVisible(true);

}

点退出就结束程序:MenuItem可以添加ActionListener事件监听,Menu继承。让closeItem.addActionListener(new ActionListener(){  });

12-GUI(练习-打开文件,,保存文件)、

需求:用TextArea  FileDialog  Menu组件等完成一个打开和保存文件的小程序

//点打开时弹出打开文件对话框,并实现对文本文件的打开

openItem.addActionListener(new ActionListener()

{

publicvoidactionPerformed(ActionEvent e)

{

openDia.setVisible(true);  //打开文件 对话框可视

//获取 获取此文件对话框的目录

StringdirPath =
openDia.getDirectory();

//
获取此文件对话框的选定文件。

StringfileName =
openDia.getFile();

//     System.out.println(dirPath+"   "+fileName);

if(dirPath==null || fileName ==null)

return;        //不写这句话,当点取消时会出异常,没有选文件

ta.setText("");

Filefile = new File(dirPath, fileName);

try

{

BufferedReaderbufr =new BufferedReader(new FileReader(file));

Stringline = null;

while((line=bufr.readLine())!=null)

{

ta.append(line+"\r\n");

}

bufr.close();

}

catch(IOException ex)

{

thrownew RuntimeException("读取失败");

}

}

});

//点保存时当文件名不存在弹出保存文件对话框,并实现对文本文件的保存

//文件名存在时直接保存,这里存在指的是第一次存储后没有关闭程序,再去存储,file全局变量

saveItem.addActionListener(new ActionListener()

{

publicvoidactionPerformed(ActionEvent e)

{

if(file==null)

{

saveDia.setVisible(true);

//获取要存储的文件对象

StringdirPath =
saveDia.getDirectory();    //获取存储文件目录

StringfileName =
saveDia.getFile();     //获取要存储的文件名

//当叉掉对话框或点取消时,没有获取到,下面创建文件对象就会出异常

if(dirPath==null || fileName ==null)

return;

file =newFile(dirPath,fileName);

}

try

{

BufferedWriterbufw = new BufferedWriter(new FileWriter(file));

Stringtext =
ta.getText();

bufw.write(text);

bufw.close();

}

catch(IOException ex)

{

thrownew RuntimeException("存储文件失败");

}

}

});

java--GUI(图形用户接口)的更多相关文章

  1. java基础七 [图形用户接口](阅读Head First Java记录)

    到目前为止我们接触的都是Java的命令行,但是为了让用户使用,必须有图形化界面,所以这章主要讲的是怎么使用GUI(图形用户接口)   创建一个GUI:javax.swing.* 本章讲的布局相关内容都 ...

  2. 图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)

    图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面. 与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉 ...

  3. JAVA GUI 事件监听事件 详解 和 案例.

    GUI(图形用户界面) Graphical User Interface(图形用户接口) 用图形的 方式, 来显示 计算机操作的 界面, 这样更方便 更直观. CLI Command Line Use ...

  4. java GUI(图形用户界面)

    GUI Graphical User Interface(图形用户接口). 用图形的方式,来显示计算机操作的界面,这样更方便更直观. CLI Command line User Interface ( ...

  5. 再见!【JAVA GUI】

    1.GUI概述 图形用户界面(Graphical User Interface,简称 GUI,又 称图形用户接口)是指采用图形方式显示的计算机操作用户界面. java作为一种面向对象的程序设计语言,它 ...

  6. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  7. JAVA GUI

    JAVA GUI中的事件处理:   委托事件模型:事件源对象和监听器对象具有绑定关系   一个监听器可以绑定多个事件源 一个事件源也可以绑定多个监听器 监听器有各自监听的事件类型   设置容器的布局管 ...

  8. paip.java gui swt/jface 最佳实践

    paip.java gui swt/jface 最佳实践 1. 工具:Eclipse +jigloo4 1 2. 安装插件: 1 1. IMPORT swt lib 2 2. 新建立窗体 2 3. 运 ...

  9. 写在学习Java GUI之前

    Java GUI就是用Java语言开发桌面应用,而Java又有三个Java GUI库,分别为AWT,Swing和SWT/JFace. 现在要学的是Swing库. 后记:开发桌面应用,不止一种技术,现在 ...

随机推荐

  1. Dynamics CRM2013 用户进入系统所必需的那些权限

    本篇以CRM2013为例,在CRM中新建一个安全角色后该安全角色基本是空的,如果新建的安全角色作为一个账号的唯一安全角色时,那这个安全角色除了需要配置业务场景所需的权限外,是要优先具备进入CRM系统的 ...

  2. Cocos2D:变换(transforms)在图形编程中扮演的角色

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交 ...

  3. Python 自动刷博客浏览量

    哈哈,今天的话题有点那什么了哈.咱们应该秉承学习技术的角度来看,那么就开始今天的话题吧. 思路来源 今天很偶然的一个机会,听到别人在谈论现在的"刷量"行为,于是就激发了我的好奇心. ...

  4. 4、Android UI测试

    为你的APP进行UI测试是为了确保不出现意料之外的结果,提升用户的体验.如果你需要验证你的APP UI的正确性,你需要养成创建UI测试的习惯. Espresso测试框架是由Android Testin ...

  5. 网站开发进阶(四十二)巧用clear:both

    网站开发进阶(四十二)巧用clear:both 前言 我们在制作网页中用div+css或者称xhtml+css都会遇到一些很诡异的情况,明明布局正确,但是整个画面却混乱起来了,有时候在IE6下看的很正 ...

  6. gradle编译出错:Execution failed for task ':app:compileTestDebugJava'.

    今天更新了android studio,从0.5.3升级到0.6.1版本,结果在IDE中编译时没有问题,但是在命令行时编译就会出现以下错误: :app:compileTestDebugJava FAI ...

  7. Java-IO之BufferedWriter(字符缓冲输出流)

    BufferedWriter是字符缓冲输出流,继承于Writer,作用是为其他字符输出流添加一些缓冲功能. BufferedWriter主要的函数列表: BufferedWriter(Writer o ...

  8. UNIX网络编程——I/O复用:select和poll函数

    我们看到TCP客户同时处理两个输入:标准输入和TCP套接字.我们遇到的问题是就在客户阻塞于(标准输入上)fgets调用,服务器进程会被杀死.服务器TCP虽然正确的给客户TCP发送了一个FIN,但是既然 ...

  9. Linux信号实践(1) --Linux信号编程概述

    中断 中断是系统对于异步事件的响应, 进程执行代码的过程中可以随时被打断,然后去执行异常处理程序; 计算机系统的中断场景:中断源发出中断信号 -> CPU判断中断是否屏蔽屏蔽以及保护现场 -&g ...

  10. 【IOS 开发】Object-C 入门 Xcode 环境详解

    作者 : 韩曙亮 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/38424965 一. Xcode 环境安装 与 工程创建 1. ...