0
点赞
收藏
分享

微信扫一扫

第十一章 AWT编程

_LEON_ 2022-04-03 阅读 190
java

AWT是可视化编程,就是说代码写上去的内容自己运行是可以直接看到的,这样就比较有趣,所以AWT编程的学习乐趣还是非常多的。
本章要点

  • 图形用户界面编程的概念
  • AWT的概念
  • AWT容器的常见布局管理
  • 使用AWT基本组件
  • 使用对话框
  • 使用文件对话框
  • Java的事件机制
  • 事件源、事件、事件监听器的关系
  • 使用菜单条、菜单、菜单项创建菜单
  • 创建并使用右键菜单
  • 重写paint()方法实现绘图
  • 使用Graphics类
  • 使用BufferedImage和ImageIO处理位图
  • 使用剪切板
  • 剪切板数据分格
  • 拖放功能
  • 拖放目标与拖放源
    本章和下一章的内容会比较“有趣”,因为可以看到非常熟悉的窗口、按钮、动画等效果,而这些图形界面的元素不仅会让开发者感到更“有趣”,对最终用户也是一种诱惑,用户总是喜欢功能丰富、操作简单的应用,图形用户界面的程序就可以满足用户的这种渴望。
    Java使用AWT和Swing类完成图形用户界面编程,其中AWT的全程是抽象窗口工具类(AbstractWindowToolkit),它是Sun最早提供的GUI库,这个GUI库提供了一些基本功能,但这个GUI库的功能比较有限,所以后来又提供了Swing库。通过AWT和Swing提供的图形界面组件库,Java的图形用户界面编程非常简单,程序只要依次创建所需的图形组件,并以何时的方式将这些组件组织在一起,就可以开发出非常美观的用户界面。
    程序以一种“堆积木”的方式将这些图形用户组件组织在一起,就是实际可用的图形用户界面,但这些图形用户界面还不能与用户交互,为了实现图形用户界面与用户交互操作,还应为程序提供事件处理,事件处理负责让程序可以响应用户动作。
    通过学习本章,读者应该能开发出简单的图形用户界面引用,并提供相应的时间相应机制。本章也会介绍Java中的图形处理、剪切板等操作知识。

Java改进的GUI(图形用户界面)和AWT

前面所介绍的所有程序都是基于命令行的,基于命令行的程序可能只有一些“专业”的计算机人士才会使用。例如前面编程的五子棋、梭哈游戏等程序,恐怕只有程序员自己才愿意玩这么“糟糕”的游戏,很少有最终用户愿意对着黑糊糊的命令行界面敲命令。
相反,如果为程序提供直观的图形用户界面(Graphics User Interface,GUI),最终用户通过鼠标拖动、单机等动作就可以操作整个应用,整个应用程序就会受欢迎的多(实际上,Windows之所以广为人知,其最初的吸引力就是来自于它所提供的图形用户界面)。作为一个程序设计者,必须优先考虑用户的感受,一定要让用户感受到“爽”,程序才会被需要、被使用,这样的程序才有价值。
当JDK1.0发布时,Sun提供了一套基本的GUI类库,这个GUI类库希望可以在所有平台下都能运行,这套基本类库被称为“抽象窗口工具集”(Abstract Window Toolkit),它为Java应用程序提供了基本的图形组件、AWT是窗口框架,它从不同平台的窗口系统中提取出共同组件,当程序运行时,将这些组件的创建和动作委托给程序所在的运行平台。简而言之,当使用AWT编写图形界面引用时,程序仅指定了界面组件的位置和行为,并未提供真正的实现,JVM调用操作系统本地的图形界面来创建和平台一致的对等体。
使用AWT创建的图形界面引用和所在的运行平台有相同的界面风格,比如在Windows操作系统上,它就表现出Windows风格,在UNIX操作系统上,它就表现出UNIX风格。Sun希望采用这种方式来实现“Write Once,Run Anywhere”的目标。
但在实际引用中,AWT出现了如下几个问题。

  • 使用AWT做出的图形用户界面在所有的平台上都显得很丑陋,功能也非常有限。
  • AWT为了迎合所有主流操作系统的界面设计,AWT组件只能使用这些操作系统上图形界面组件的交集,所以不能使用特定操作系统上复杂的图形界面组件,最多只能使用4种字体。
  • AWT用的是非常笨拙、非面向对象的编程模式。
    1996年,Netscape公司开发了一套工作方式完全不同的GUI库,简称为IFC(Internet Foundation Classes),这套GUI的所有图形界面组件,例如文本框、按钮都是绘制在空白窗口上的,只有窗口本身需要借助于操作系统的窗口实现。IFC真正实现了各平台上的界面一致性。不久,Sun和Netscape合作完善了这种方法,并创建了一套新的用户界面库:Swing。AWT、Swing、辅助功能 API、2D API以及拖放API共同组成了JFC(Java Foundation Classes,Java基础类库),其中Swing组件全面替代了Java1.0中的AWT组件,但保留了Java1.1中的AWT事件模型。总体上,AWT是图形用户界面编程的基础,Swing组件替代了绝大部分AWT组件,对AWT图形用户界面编程有极好的补充和加强。
    Java9的AWT和Swing组件可以自适应高分辨率屏。在Java9之前,如果使用高分辨率屏,由于这种屏幕的像素密度可能是传统显式设备的2-3倍(即单位面积里显式像素更多),而AWT和Swing组件都是基于屏幕像素计算大小的。因此这些组件在高分辨率屏上比较小。
    Java9对此进行了改进,如果AWT或Swing组件在高分辨率屏幕上显示,那么组件的大小可能会以实际屏幕的2个或3个像素作为“逻辑像素”,这样就可保证AWT或Swing在高分辨率屏上也具有正常大小。另外,Java9也支持OS X设备的视网膜屏。
    简而言之,Java9改进后的AWT和Swing组件完全可以在高分辨率屏、视网膜屏上具有正常大小。
    Swing并没有完全替代AWT,而是建立在AWT基础之上,Swing仅提供了能力更强大的用户界面组件,即使是完全采用Swing编写的GUI程序,也依然需要使用AWT的事件处理机制。本章主要介绍AWT组件,这些AWT组件在Swing里将有对应的实现,二者用法基本相似,下一章会有更详细的介绍。
    所有和AWT编程相关的类都放在 java.awt包以及它的子包中,AWT编程中有两个基类,Component和MenuComponent。下图显示了AWT图形组件之间的继承关系。
举报

相关推荐

0 条评论