JavaGUI编程

一、GUI概述

GUI(Graphical User Interface)就是图形用户接口,就是让用户和计算机通过图形化界面进行互动,拜托命令行,CLI就是命令行用户接口。GUI提供的对象存在Java.AWT和Javax.Swing两个包中,
AWT:抽象窗口工具包,需要调用本地系统方法功能,比较依赖于操作系统,也就是在不同操作系统下运行有些差异,属重量级控件。
Swing:在AWT的基础上,建立的一套图形界面系统,提供了更多的组件,而且完全由java实现,不那么依赖操作系统,增强了移植型,属轻量级控件。

二、继承关系图


三、GUI布局

GUI常见布局管理器
1、FlowLayout 流式布局,从左到右,占满则下一行,panel的默认布局方式。
2、BorderLayout 边界布局,需要指定东西南北中,Frame的默认布局方式。
3、GridLayout 网格布局,规则的矩阵。
4、GridBayLayout 网格包布局,非规则的矩阵。
5、gradLayout 卡片布局,比如选项卡。

四、事件监听机制


事件监听机制其实不难理解,就是在事件源添加一个监听器,这个监听器会监听事件源上被外部所做的各种动作,当某个动作发生后就会产生一个事件对象传回给监听器,监听器中有不同事件对应的应该做的处理方法。比如说按钮作为事件源,可以监听它是被单击还是双击,如果是单击就传回单击事件对象,然后监听器就执行单击事件对应的事件处理方式。
示例如代码所示:
  1. <pre name="code" class="java">//给frame添加监听器  
frame.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e)//复写窗口关闭事件{System.exit(0);//当点击关闭按钮时执行的代码,可以写其他的。}});
添加监听器时,到要传入一个监听器(或者称为适配器),这里用的是添加匿名内部类的方法, 创建一个监听器,但是需要注意的是,我们并没有创建WindowListener, 因为它里面有很多个抽象方式,如果我们时间WindowListener这个借口,就必须全部复写这些抽象方法,这显然是非常麻烦的,因为我们只是要到其中的 个别方法。WindowListener借口有一个子类WindowAdapter,它复写了所有抽象方法,所以我们用WindowAdapter,到用到某个方法是,复写该方法即可。 java中,很多的监听器中都有很多事件方法,而且都是抽象的,因此他们也都有对应的子类复写了这里方法,比如鼠标事件MouseListener对应的MouseAdapter。

五、常见事件的方法:

窗体事件:

1、windowActivated(WindowEvent e); 窗口激活时调用。

2、windowOpened(WindowEvent e); 窗口打开时调用。

3、windowClosed(WindowEvent e); 当窗口已被关闭后调用。

4、windowClosing(WindowEvent e); 当敞口正处在关闭时调用。

鼠标事件:

1、mouseEntered(MouseEvent e); 鼠标移入是调用
2、mouseClicked(MouseEvent e);鼠标点击(按下并释放)
3、mouseExited(MouseEvent e);鼠标离开组件时调用
4、mousePressed(MouseEvent e);鼠标在组件上按下时调用
5、mouseReleased(MouseEvent e);鼠标在组件上释放是调用
双击动作:public void mouseClicked(MouseEvent e){
if(e.getClickCount()==20)
}    
//其实事件产生后事件e里记录有很多详细信息,比如这里的鼠标事件,就记录有单击了几次。所以可以获取e里面的详细信息确定是单击还是双击。

键盘事件:

1、keyPressed(KeyEvent e) ;键盘按下
这里的e也记录很多信息,比如按下了哪个键,需要注意的是,键盘上的每一个键都对应一个静态常量和码(code),比如回车键是VK_ENTER。
e中的主要方法,getKeyChar()、getKeyCode(),通过两个方法可以知道按下了哪个键。
2、consume(); 使用此事件以便不会按照默认方式产生此事件的源代码来处理事件。如:TextField的KeyPressed事件,在按下键盘时,判断满足条件才写入文本中。详见代码示例:
  1. <span style="font-size:14px;">public void keyPressed(KeyEvent e){  
  2.             int code = e.getCode();  
  3.             if (!(code>=KeyEvent.VK_0&&code<=KeyEvent.VK_9))  
  4.             {  
  5.                 System.out.pritln("输入的不是数字");  
  6.                 e.consume();  
  7.             }  
  8.         }</span> 
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值