黑马程序员 java基础24天 GUI编程学习总结

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ---------------------

一.图形用户界面

GUI:Graphical  User Interface(图形用户接口)

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

 

Java为GUI提供的对象都存爱java.awt和java.Swing两个包中

    图形化的界面,是为了更加直观的提供服务,其内部代码的书写,跟之前的代码书写没有什么太大的区别。

 

二.Awt和Swing

java.Awt:

Abstract Window ToolKit(抽象窗口工具包)

需要调用本地系统方法实现功能,属于重量级控件

 

javax.Swing;

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

【注意:目前学习的GUI编程,使用的是Awt工具包】

 

三.继承关系图

Component(组件)【抽象类】

  |--Container(容器)

       |--Panel(面板)

              |--Window(窗口)

                   |--Frame(框架)

                      |--Dialog(对话框)

                           |--FileDialog

  |--Button

  |--Label

  |--Checkbox

  |--TextComponent

        |--TextField

        |--TextArea

 

Container:为一个容器,以一个比较特殊的组件,该组件可以通过add方法向其中添加组件

只有Container可是添加组件,其实是内部封装了一个集合,如按钮就是一定对象

 【创建的窗体,其实是程序中另外的线程在执行】

子类创建对象

 

四.布局管理器

容器中组件的排放方式,就是布局

常见的布局管理其:

FlowLayout(流式布局管理器)

          从左到右的顺序排列

                 Panel默认的布局管理器

BorderLayout(边界布局管理器)

          东、南、西、北、中

                 Frame默认的布局管理器

GridLayout(网格布局管理器)

          规则的矩阵

CardLayout(卡片布局管理器)

          选项卡

GridBagLayout(网格包布局管理器)

          非规则的矩阵

 

五.创建一个图形化界面过程

1.常见一个窗体对象

Frame f  = new Frame(Stringtitle);

2.设置这个窗体的大小

setSize(int x,int y)   

3.设置这个窗体的位置

setLocetion (int x,int y)

同时设置2,3:setBouds(inta,int b ,int c,int d)

4.设置窗体的布局

   f.setFlayOut(new FlowLayout())

5.添加控件

   f.add(组件)

6.将窗体设置为可见

    f.setVisible(true)

见代码实例

 

六.事件监听机制组成

事件源:(组件)

事件:(Event)

监听器:(Listener)

事件处理:(引发事件处理方式)

 

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

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

监听器:将可以触发某事件的动作都已经封装到了监听其中

以上三者,在java中都已经定义好了

直接获取对象来用就可以了

我们要做的事情是:就是对响声的动作进行处理

 

 

 

 

 

七.事件监听机制流程

  首先,应该先将监听器(也就是监听引发事件的动作(有的话就调用相应的处理方式))

  然后,当有外部动作时,当有监听器所监听的动作作用于事件源上时,监听器就将相应的

      事件对象传递给事件处理方式来处理

 

八.鼠标键盘事件和适配器的产生过程

【确定事件源,确定事件,确定监听器,确定要要操作什么】

要给frame窗体添加鼠标键盘事件,则需要使用其父类Window的方法

addWindowListener(),并向其中传递一个WindowListener,而该类中的事件处理方法又是不确定的,所以就将这个类定义为一个抽象类。

而其中的包含的事件处理方法,也都必须是抽象的,当我们new一个WindowListener的子类对象的时候,就必须复写其所有的抽象方法。

但是,我们常常只是处理该事件源的部分事件,但每次绑定监听的时候却总是要复写其他的事件处理方法,这是相当繁琐的。正是因为这样适配器就出现了。

适配器是一种抽象类,但是其中却没有抽象方法,它继承自事件监听类。比如,WindowAdapter继承自WindoListener抽象类。然后我们new  WindowAdapter的子类对象,采用匿名内部类,复写我们要监听的事件的处理方式,这样就简化了书写。

适配器定义为抽象类,这样就不可以创建对象了,因为创建类也没有意义,因为给类中的方法都是空的。那就干脆不然创建了。

适配器的出现是因为监听器监听事件很多,当一个监听器的监听事件不超过三个时,就不需要监听器了。

 

一般绑定监听器的格式为:

事件源.addXxxListener(newXxxAdapter(){

     publicvoid 事件名(XxxEvente)

});

 

(1)窗体监听器

addWindowListener—>new WindowAdapter()—>WindowEvente

 

(2)活动监听(即可以键盘触发,又可以鼠标触发)

addActionListener-->newActionListener()-->public void actionPerformed(ActionEvent e)

【该监听器没有适配器】

 

(3)鼠标监听

addMouseListener-->new MouseAdapter()-->MouseEvente

 

(4)键盘监听

addKeyListener-->new KeyAdapter()-->KeyEvente

 

代码示例:

import java.awt.*;

import java.awt.event.*;

 

class AwtDemo

{

       publicstatic void main(String[] args)

       {

              Framef = new Frame("my frame");

       f.setSize(500,400);//设置长和宽

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

              f.setLayout(newFlowLayout());//设置窗体布局

      

              //添加一个按钮

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

 

              //添加到窗体中

              f.add(b);

 

              f.addWindowListener(newWindowAdapter()

              {

                     publicvoid windowClosing(WindowEvent e)

                     {

                System.out.println("我关");

                System.exit(0);

                  }

                     publicvoid windowActivated(WindowEvent e)

                     {

                            System.out.println("我活了");

                     }

              });//绑定监听器

 

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

        }

}

 

九.共性事件(鼠标键盘事件):找component

例如:

Void   addMouseListener(MouseListener l)

         添加指定的鼠标侦听器,以接收发自此组件的鼠标事件。

Void   addKeyListener(KeyListener l)

         添加指定的按键侦听器,以接收发自此组件的按键事件。

 

适配器:        

KeyAdapter()的常用方法

方法摘要

 Void    keyPressed(KeyEvent e)

         按下某个键时调用此方法。

 void   keyReleased(KeyEvent e)

         释放某个键时调用此方法。

 Void    keyTyped(KeyEvent e)

         键入某个键时调用此方法。

 

KeyEvent中常见方法

char getKeyChar()

         返回与此事件中的键关联的字符。

 intgetKeyCode()

         返回与此事件中的键关联的整数keyCode

 

java.awt.event.InputEvent中的常见方法

boolean   isAltDown()

           返回 Alt 修饰符在此事件上是否为 down。

 boolean  isAltGraphDown()

           返回 AltGraph 修饰符在此事件上是否为 down。

 Boolean  isConsumed()

           返回是否已经使用此事件。

 boolean   isControlDown()

           返回 Control 修饰符在此事件上是为 down。

 boolean   isMetaDown()

           返回 Meta 修饰符在此事件上是否为 down。

 boolean   isShiftDown()

           返回 Shift 修饰符在此事件上是否为 down。


十.菜单

MenuBar 菜单条     Menu 菜单项    MenuItem  子菜单

 

菜单条中可以添加子菜单,菜单项;菜单项中可以添加菜单项,子菜单

菜单条需要添加在一个容器中

代码示例:

f = new Frame("My Text");

              mb = newMenuBar();

              m = newMenu("文件");

              m1 = newMenu("资源");

              saveFileItem =new MenuItem("保存");

              closeItem = newMenuItem("关闭");

              openItem = newMenuItem("打开")

 

mb.add(m);

              m.add(m1);

              m.add(saveFileItem);

              m.add(closeItem);

              m1.add(openItem);

    f.setMenuBar(mb);//添加

 

十一.Dailog和FileDailog的创建

(1)Dialog dia = new Dialog(f,"错误提示",true);

常见Dialog对象,向构造函数中传递三个参数:f表示属于那个窗体,“错误提示”表示该对话框的标题,true指定在显示的时候是否阻止用户将内容输入到其他顶级窗口中,设置为true则表示阻止。

可以通过setVisible(boolean b)来设置其是否可见

 

 

(2)FileDialog  fd = new FileDialog(f,"打开文件",FileDialog.LOAD);

     FileDialog  fd1 = new FileDialog(f,"保存文件",FileDialog.SAVE);

        FileDialog有两个主要功能,一个是打开文件,一个是保存文件。我们可以在创建时就设定值为FileDialog.LOAD,FileDialog.SAVE

 

主要方法:

void    setVisible(boolean b)

         根据参数 b 的值显示或隐藏此 Dialog。

void    setMode(int mode)

         设置文件对话框的模式。

String  getDirectory()

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

String  getFile()

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

 


---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------详细请查看:www.itheima.com

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值