黑马程序员——GUI(图形用户界面)中的AWT



------- android培训java培训、期待与您交流! ----------




GUI(图形用户界面) 


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

CLI命令行用户接口。就是常见的DOS命令操作,需要记忆一些常用的命令,操作不直观。

JAVAGUI提供的对象都存在java.Awt,javax.Swing两个包中。 


举例:

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


java.Awtjavax.Swing


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

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


GUI图例:

黑马程序员——GUI(图形用户界面)中的AWT_第1张图片


黑马程序员——GUI(图形用户界面)中的AWT_第2张图片


component是一个具有图形表示能力的对象,可在屏幕上显示,并可与用户进行交互。典型图形用户界面中的按钮、复选框和滚动条都是组件示例。


Component类是与菜单不相关的 Abstract Window Toolkit组件的抽象超类。还可以直接扩展类 Component来创建一个轻量级组件。轻量级组件是与本机不透明窗口不相关的组件。 


事件监听机制


事件处理机制专门用于响应用户的操作,比如,想要响应用户的点击鼠标,按下键盘等操作,就需要使用AWT的事件处理机制。


事件监听机制的特点:

1、事件源

2、事件

3、监听器

4、事件处理


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

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

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

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

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

我们要做的事情是,就是对产生的动作进行处理。


黑马程序员——GUI(图形用户界面)中的AWT_第3张图片



例:

f.addWindowListener(newWindowAdapter()

     {

        public void windowClosing(WindowEvent e)

        {

           System.exit(0);

        }

        public void windowActivated(WindowEvent e)

        {

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

        }

        public void windowOpened(WindowEvent e)

        {

           System.out.println("我被打开了。。。");

        }

      });

 


事件监听流程图:


黑马程序员——GUI(图形用户界面)中的AWT_第4张图片


 


 让按钮具备退出程度的功能

按钮就是事件源

那么选择哪个监听器呢?

通过关闭窗体示例了解到,想要知道哪个组件具备什么样的特有监听器

需要查看该组件对象的功能

通过查阅button的描述,发现按钮支持一个特有监听addActionListener.

 


练习:GUI鼠标事件


but.addActionListener(new ActionListener()

                    {

                           publicvoid actionPerformed(ActionEvent e)

                           {

                                  System.out.println("actionok");

                           }

                    });

                    but.addMouseListener(newMouseAdapter()

                    {

                           privateint count = 1;

                           privateint clickCount = 1;

                           publicvoid mouseEntered(MouseEvent e)

                           {

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

                           }

                           publicvoid mouseClicked(MouseEvent e)

                           {

                                  if(e.getClickCount()== 2)

                                         System.out.println("点击动作"+clickCount++);

                           }

                    });


GUI键盘事件               


but.addMouseListener(new MouseAdapter()

                    {

                           privateint count = 1;

                           privateint clickCount = 1;

                           publicvoid mouseEntered(MouseEvent e)

                           {

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

                           }

                           publicvoid mouseClicked(MouseEvent e)

                           {

                                  if(e.getClickCount()== 2)

                                         System.out.println("点击动作"+clickCount++);

                           }

                    });

                    //键盘事件

                    but.addKeyListener(newKeyAdapter()

                    {

                           publicvoid keyPressed(KeyEvent e)

                           {

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

                                         System.out.println("ctrl+enteris run");

                                  //System.out.println(e.getKeyChar()+".."+e.getKeyCode());

                           }

                    });

                    tf.addKeyListener(newKeyAdapter()

                    {

                           publicvoid keyPressed(KeyEvent e)

                           {

                                  intcode = e.getKeyCode();

                                  if(!(code>=KeyEvent.VK_0&& code<=KeyEvent.VK_9))

                                  {

                                         System.out.println(code+"...是非法的");

                                         e.consume();

                                  }                          

                           }

                    });


图例:


黑马程序员——GUI(图形用户界面)中的AWT_第5张图片


 

布局管理器


在java.awt包中提供了五种布局管理器,分别是FlowLayout(流式布局管理器),BorderLayout(边界布局管理器),GridLayout(网格布局管理器),GridBagLayout(网格包布局管理器),CardLayout(卡片布局管理器)。

每个容器在创建时都会使用一种默认的布局管理器,在程序中可以通过调用容器对象的setLayout()方法设置布局管理器,通过布局管理器来自动进行组件的布局。


图例:


黑马程序员——GUI(图形用户界面)中的AWT_第6张图片


FlowLayout布局管理器的特点就是可以将所有组件像流水一样依次进行排列,不需要用户明确地设定,但是在灵活性上相对差了点。



BorderLayout是一种较为复杂的布局方式,它将容器划分为五个区域,分别是东、南、西、北、中。组件可以被放置在这五个区域中的任意一个。


图例:

黑马程序员——GUI(图形用户界面)中的AWT_第7张图片


当向BorderLayout布局管理器的容器中添加组件时,需要使用add(Component comp,Object constraints)方法,其中参数constraints是Object类型,在传参时可以使用BorderLayout类提供的五个常量,分别是EAST、SOUTH、WEST、NORTH和CENTER。



GridLayout使用纵横线将容器分成n行m列大小相等的网格,每个网格中放置一个组件。添加到容器中的组件首先放置在第1行第1 列(左上角)的网格中,然后在第1行的网格从左向右依次放置其他组件,行满后,继续在下一行从左到右放置组件。与FlowLayout不同的是,放置在GridLayout布局管理器中的组件将自动占据网格的整个区域。


图例:

黑马程序员——GUI(图形用户界面)中的AWT_第8张图片



GridBagLayout是最灵活、最复杂的布局管理器,与GridLayout布局管理器类似,不同的是,它允许网格中的组件大小各不相同,而且允许一个组件跨越一个或者多个网格。

使用GridBagLayout布局管理器的步骤如下:

1、创建GridBagLayout布局管理器,并使容器采用该布局管理器。

2、创建GridBagLayout对象,并设置该对象的相关属性。

3、调用GridBagLayout对象的setConstraints()方法建立GridBagConstraints对象和受控组件之间的关联。

4、向容器中添加组件。


图例:

黑马程序员——GUI(图形用户界面)中的AWT_第9张图片
















你可能感兴趣的:(黑马技术博客)