Java华丽转身 —— GUI编程宝典

 GUIGraphics User Interface,图形用户界面。GUI直观的将计算机的功能呈现给用户,图形界面在视觉上更容易接受、更简单直观。

 

     GUI需要操作系统和硬件的支持。因此,GUI编程往往要处理移植性问题。JavaGUI编程有相对比较好的可移植性。

 

    GUI的三要素:组件、容器、事件。

           组件,继承了一定的功能模块,提供了公用接口以便外部调用,具有良好的可重用性。

        

           容器,在有些语言中也称为窗体,容器也是一种特殊的组件,容器中可以放置其他组件,并且通过布局管理器管理容器中各组件的位置。

       

          事件,每个组件都会触发动作事件,java中不同的事件由不同的监听器处理,组件是事件源,而某种监听器主要用来监听来自指定事件源产生的动作事件。

 

一、Swing组件

 

    JavaGUI功能主要集中在awtswing两个包中。awtGUI底层包。swing包是高层的封装,更容易移植。Swing包中有很多Swing组件。

 

      Swing组件独立于本地窗口系统

      Swing组件除了AbstractButton类之外都以J开头

      Swing组件是基于AWT构建的

             包含AWT可视化组件的替代组件,也包含复杂组件-树和表,因此,提供了更丰富的组件类型

 



二、容器

 

         容器是一种特殊的组件,其它组件可以放置到容器中,并且通过布局管理器进行布局控制。

AWT提供的两个主要的容器类:


     Window,可以独立存在的顶级窗口

     Panel:可以作为容器容纳其它组件,但不能独立存在,必须被添加到其他容器中。

     其中,每一种容器都采用一种默认的布局管理方式。

 

布局管理


    Java的组件在容器中的具体位置是通过布局管理器LayoutManager实现的。

    如下图:

    FlowLayout是一种最简单的布局管理器,主要思想是让容器内的组件按照行优先的方式排列,一行排列到边界后就折回到下一行继续排列,以此类推。Panel默认使用此布局管理器。

 

    BorderLayoutFrame的默认布局管理器。它把窗体分割成North,South,East,WestCenter五个区域,并且根据窗体的大小自动调整组件的大小。默认是Center区。

 

    GridLayout将空间划分成规则的矩形网格,每个单元格区域大小相等。组件被添加到每个单元格中,先从左到右填满一行后换行,再从上到下。

 

        布局管理器负责各个组件的大小和位置,用户无法在这种情况下设置组件大小和位置属性,如果用户要自己设置则取消该布局管理器的方法为:setLayout(null)

 

 

三、事件

 

        事件一般分为三种类型:键盘事件、鼠标事件以及组件的动作事件

        事件处理过程中涉及到3个对象:事件源,事件和监听器

    事件的处理机制是一种委派式事件处理方式:普通组件将整个事件处理委托给特定的事件监听器,当该事件源发生指定的事件时,就通知所委托的事件监听器,由事件监听器来处理这个事件。

 

 

       实现监听机制,需要有一下三个必要步骤:

 

     No.1 In the declaration for the eventhandler class,one line of code specifies that the class either implements alistener interface or extends a class that implements a listener interface.Forexample:

 

[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. Publicclass MyClass implement ActionListener{}  


 

    No.2Another lineof code registers an instance of the event handler class as a listener on oneor more components. For example:

 

[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. someComponent.addActionListener(instanceOfMyClass);  


           No.3 The event handler class has code that implementsthe methods in the listener interface. For example:

 

[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. public voidactionPerformed(ActionEvent e) {  
  2.    ...//code that reacts to the action...  
  3. }  


 

    模型如下

   


    事件监听有四种实现方式:自身类作为事件监听器;外部类作为事件监听机制;匿名内部类作为事件监听器;内部类作为事件监听器。


代码:

[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. import java.awt.*;  
  2. import java.awt.event.*;  
  3. public class TestWindowClose{  
  4.     public static void main(String[] args){  
  5.        new MyFrame55("MyFrame");  
  6.     }  
  7. }  
  8. class MyFrame55 extends Frame{  
  9.      MyFrame55(String s){  
  10.         super(s);  
  11.         setLayout(null);  
  12.         setBounds(300,300,400,300);  
  13.         this.setBackground(new Color(204,204,255));  
  14.         setVisible(true);  
  15.           
  16.         /*this.addWindowListener(new MywindowMonitor());*/  
  17.           
  18.         /*匿名内部类,出了括号没人认识了,适用于方法逻辑简单,语句比较少,而且不经常变动的类*/  
  19.         this.addWindowListener(new WindowAdapter(){  
  20.             public void windowClosing(WindowEvent e){  
  21.                setVisible(false);  
  22.                System.exit(-1);                                           
  23.             }  
  24.         });  
  25.      }  
  26.      /*内部类,只有这个类认识,出了这个类就不认识了*/  
  27.      class MywindowMonitor extends WindowAdapter{  
  28.          public void windowClosing(WindowEvent e){  
  29.             setVisible(false);  
  30.             System.exit(0);  
  31.          }  
  32.      }  
  33. }  


总结

 

         一个软件是否为优秀的软件,用户界面的设计直观重要。开发人员在进行GUI设计时,需要与软件的用户进行充分的沟通,确定用户的需求和使用习惯,在实用性与美观之间达到平衡。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值