转载请申明出处: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. SSO 基于Cookie+fliter实现单点登录 实例解析(一)

    接上文,SSO的理论讲解,接下来实践实践! 1.使用Cookie解决单点登录 技术点: 1.设置Cookie的路径为setPath("/").即Tomcat的目录下都有效 2.设置 ...

  2. 【ShaderToy】开篇

    写在前面 呜呼,好久没有写博客了,好惭愧.题外话,感觉越大就越想家,希望可以一直和家人在一起,哪怕只是坐在一起不说话也觉得很温暖,一想到要分开眼睛就开始酸,哎.开学还是爬上来老实更新博客学习吧~ 今天 ...

  3. 程序员必须搞清的概念-equals和=和hashcode的区别

    1. 首先equals()和hashcode的介绍 equals 方法在非空对象引用上实现相等关系: * 自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true. * 对称性:对于 ...

  4. C++对象模型的那些事儿之六:成员函数调用方式

    前言 C++的成员函数分为静态函数.非静态函数和虚函数三种,在本系列文章中,多处提到static和non-static不影响对象占用的内存,而虚函数需要引入虚指针,所以需要调整对象的内存布局.既然已经 ...

  5. windows与linux的文件夹共享

    公司配备了一台性能还算不错的电脑,不过是台式机.我在上面装了ubuntu,但是我的代码工作目录全部都在我自己的win7笔记本上.有时程序开多了就容易卡,于是想到用装ubuntu的台式机来访问我win7 ...

  6. (NO.00005)iOS实现炸弹人游戏(一):游戏的整体规划设计

    在这新的系列中,我们来尝试完成一款经典的游戏:炸弹人 这是以前红白机上的炸弹人,由于游戏可玩性强,玩法又简单,在后面的机型上陆续推出了很多款续作. 在随后的触屏设备上也出现了炸弹人的模拟版,用的是模拟 ...

  7. ROS_Kinetic_15 ROS使用Qt

    ROS_Kinetic_15 ROS使用Qt 在网页http://www.qt.io/download-open-source/#section-2 下载并安装Qt ~/下载$ chmod +x qt ...

  8. Libgdx 1.6.0发布,跨平台游戏开发框架

    [1.6.0] -英文原文:http://www.badlogicgames.com/wordpress/?p=3682 -API更改:GlyphLayout xAdvances现在有了额外的开始入口 ...

  9. C++ Primer 有感(标准库map类型)

    map是键-值对的集合.map类型通常可以理解为关联数组:可以使用键作为下标获取一个值,正如内置数组一样.而关联的本质在于元素的值于某个特定的键相关联,而并非通过元素在数组中的位置获取. 1.map对 ...

  10. polaris: 一个用go实现的支持restful的web框架

    介绍 polaris是一个用go实现的支持restful的web框架,主要参考tornado进行设计. 虽然在go里面搭建一个http server非常的简单,这里强烈推荐gorilla,但并没有很好 ...