Java之Java GUI的发展和演化

【Java】很全很详细的GUI编程 组件:窗口、弹窗、面板、文本框、列表框、按钮、图片、监听事件、鼠标、键盘事件、破解工具 阅读详情
当Java在1995年的春天第一次发布的时候,它包含了一个叫AWT(Abstract Windowing Toolkit)的库,用来构建图形用户界面应用程序。Java很有雄心的宣言--"write once, run anywhere"许诺:一个具有下拉菜单,命令按钮,滚动条以及其他常见的GUI控件的应用程序将能够在各种操作系统上运行而不必重新编译成针对某一平台的二进制代码,包括Microsoft Windows, Sun’s own Solaris, Apple’s Mac OS以及Linux。 

虽然最初Java是支持操作系统独立的应用程序开发,在Java提出"write once, run anywhere"宣言那段时间的革命导致了Java applet和主导桌面应用程序计划的产生。

  尽管从那以后大部分构建桌面应用程序的成就都慢慢衰退,Java构建图形用户界面的能力反倒增强了。跟踪Java GUI的发展和演化,我们将发现3个主要的构建窗口程序库:AWT,Swing和SWT(Standard Widget Toolkit)。在这一章里我们将查看和分析这3个库中的每一个库,并且我们将一起来看一看第4个库--JFace。其实JFace不算一个真正的构建窗口程序库,而是在基于SWT之上的一个抽象层。

  AWT

  很多围绕着介绍Java技术的令人激动的地方都基于applets--一个可以让程序通过Internet发布并在浏览器内执行的新技术。用户和开发人员都热衷于斯,因为applets许诺将简化跨平台应用程序的开发,维护和发布,而这是商业软件开发中几个最富挑战性的话题。

  为了方便用Java构建图形用户界面,Sun最初提供了一个在所有平台下具有的独特Java外观的图形界面库。Sun在applet技术策略方面的首要伙伴Netscape提出applets应该维持和运行时平台一样的外观。他们希望applets在某一平台下在显示和行为上能够像其他应用程序一样。

  为了实现Netscape的"本地外观"的目标,在JDK的第一个发布版中包含了AWT这个库。AWT的缺省实现使用了"对等"机制,即每一个Java GUI窗口部件都在底层的窗口系统中有一个对应的组件。

  例如,每一个java.awt.Button对象将在底层窗口系统中创建一个唯一对应的button。当用户点击那个按钮的时候,事件将从本地实现库传送到Java虚拟机里,并且最终传送到与java.awt.Button对象相关联的逻辑。对等系统的实现以及Java组件与对等组件之间的交流的实现都隐藏在底层JVM实现中,Java语言级的代码仍然跨平台。

  尽管如此,为了保持"write once, run anywhere"的许诺,Java不得不妥协和折衷。特别的,Java采用了"最小公分母"的方法,即AWT仅仅提供所有本地窗口系统都提供的特性。这就需要开发人员为更多高级特性开发他们自己的高级窗口部件,然后提供给用户不同的使用体验。

  其他的问题也减缓了人们对applets的接受和承认。Applets运行在一个安全的"沙箱"里面并且能够阻止恶意的applets对文件系统,网络连接等资源的滥用。尽管沙箱提供了安全性,但它"阉割"了应用程序。毕竟一个应用程序不能运用一个网络连接来保存一个文件是不好的。Java GUI应用程序也不能像本地程序一样响应灵敏。这是在当前硬件平台和Java的解释性天性下预期结果。

  所以,用AWT开发的应用程序既缺少流行GUI程序的许多特性,又不能达到在显示和行为上像用本地窗口构建库开发的程序一样的目标。应该有一个更好的库来让Java GUI取得成功。

  Swing

  于1997年JavaOne大会上提出并在1998年5月发布的JFC(Java Foundation Classes)包含了一个新的使用Java窗口开发包。这个新的GUI组件叫做Swing,感觉到它是对AWT的升级,并且看起来对Java占据计算机世界很有帮助。对Java来说已经万事具备了:可下载的applets将是未来的软件,人们将从其他操作系统转向JavaOS,从传统的计算机转向叫做JavaStation的瘦客户端网络计算机,Microsoft将最终因为不能在桌面程序领域与之想抗衡而被废黜。虽然这些景象从来没有实现,Swing作为Java applets和applications的GUI库倒确实十分繁荣。

  Swing架构

  尽管"Swing"仅仅是这个新组件的指代名称,它一直持续使用到今天。可能是因为这个名称太贴切了,Swing尝试着以以下几种方式改变公认的观点:

  AWT依赖对等架构,用Java代码包装本地窗口部件,Swing却根本不使用本地代码和本地窗口部件

  AWT把绘制屏幕交给本地窗口部件,Swing自己的组件绘制自己

  因为Swing不依赖本地窗口部件,它可以抛弃AWT的最小公分母的方法并在每个平台下实现每个窗口部件,从而创建一个比AWT更强大的开发工具包

  Swring缺省情况下采用本地平台的显示外观。然而,它并不仅仅限于此,而是还可以采用插件式的显示外观。因此Swing应用程序可以看起来想Windows应用程序,Motif应用程序,Mac应用程序甚至它自己的显示外观--"金属"。所以,Swing应用程序可以完全忽略它运行时所在的操作系统环境并且仅仅看起来像自己。这是单调一致的桌面应用程序外观的一大挑衅。想象一下Swing有多傲慢!

  尽管如此,Swing组件超越了简单的窗口部件,它体现了正不断出现的设计模式以及一些最佳实践。采用Swing,你不仅仅得到GUI窗口部件的句柄和它所包含的数据,而是定义一个模型去保存数据,定义一个视图去显示数据,定义一个控制器去响应用户输入。事实上,大部分Swing组件的构建是基于MVC(model-view-controller)模式的。MVC使应用程序开发变得更清晰,更易维护和管理。

  Swing的缺点

  尽管Swing在AWT的基础上做出了巨大的改进,它仍然没能使Java作为构建桌面应用程序的工具。也许Swing的拥护者会立即举出Swing的成功应用案例,例如开源文本编辑器jEdit(
http://www.jedit.org/) 或者Borland的UML(Unified Modeling Language)建模工具Together( http://www.borland.com/) ,但是Swing应用程序仍然在桌面应用方面显得很少。Sun提出了一个记录可得到的Swing应用程序的列表"Swing Sightings"
(
http://java.sun.com/products/jfc/tsc/sightings/) 来证明Swing应用是值得注目的。然而我们也看到了"C++ Sightings"和"Visual Basic Sightings"的网页。

  为什么Swing没有履行它的诺言?原因可能归结为下面两点:

  速度的缺乏

  界面外观

  Swing的狂热者可能会对Swing速度慢这一点感到忿忿不平。不可否认,JIT(just-in-time)编译器,Java虚拟机以及Java语言本身就使得Swing应用程序和本地程序拉开了一定差距。尽管如此,Swing仍显得比本地应用程序行动缓慢和响应不积极。由于桌面计算变得越来越快,用户的速度期望值也随之增加,任何可感知的迟缓都将是无法忍受的。

  对Swing的显示外观的问题的抱怨也引起了Swing的开发者的愤怒。毕竟他么宣称Swing拥有各种可插入式的外观,并且事实上可以显示成任何样子。J2SE 1.4.2 甚至添加了对Windows XP和GTK+的支持,以致于在这些平台下运行的Swing应用程序会自动采用该平台的外观。

  尽管如此,问题仍然存在:Swing将一直处于最新的图形用户界面的后面,因为必需在Java库里明确地添加对最新GUI的支持。当使用J2SE 1.4.2 或更早的版本时在Windows XP上运行的Swing应用程序将显现为Windows 98的外观。而且,当使用XP themes或WindowBlinds(
http://www.stardock.net/) 等软件来改变皮肤或图形外观时用户日益铭记他们自己的特征和个性。而Swing不仅不理会操作系统,甚至连用户参数选择也不理会。

  简短的说,Swing应用程序不像本地应用程序一样执行,外观也不一样。Java要想摆脱常年以来处于不断学习中的地位并掌握桌面应用程序开发中的众多角色,它的GUI仍需要改进。

SWT

  当Eclipse.org社区人员开始构建Eclipse时,他们意识到Swing和AWT都不足以用来构建真实世界的商业程序。结果,他们决定构建一套新的GUI开发工具包用来显示Eclipse界面。这个工具包借用了VisualAge SmallTalk中的大量的库。他们把这个新的工具包命名为SWT(Standard Widget Toolkit).意识到本地行为需要本地窗口部件,SWT的设计者们采用了AWT的对等架构,而仅仅当本地组件不存在时(例如Motif下的树形组件)才求助于Java实现。这样,SWT吸收了AWT和Swing实现的最好的部分:当可以得到本地组件时使用本地实现,当不能得到本地组件时使用Java实现。这就同时保证了与本地窗口部件相当的外观和响应度。

  SWT于2001年与Eclipse IDE(Integrated Development Environment)一起集成发布。在这个最初发布版之后,SWT发展和演化为一个独立的版本。它可以使用与众多操作系统,包括Microsoft Windows,Mac OS X以及几种不同风格的Unix等。写作本书的这个时候,当前官方发布版本为2.1.3。3.0版为beta版,现在也可以下载。本系列文章采用SWT 3.0。

  另一个重要的优势为SWT的源代码是在一个开源许可下免费可得并无病毒的。这就意味着你可以在你的应用程序中使用SWT并且在任何许可认证下发布它。源代码对理解SWT库的低级别功能性和调试应用程序都是很有帮助的。开源软件也意味着比商业发布软件更新的更加频繁。

  JFace

  JFace的构建基于SWT,它提供了SWT的功能和更简易的MVC模式。SWT使用直接的API提供了原生的窗口部件,例如,你创建一个table部件并且插入你想显示的行和列的数据。JFace则提供了在SWT基础之上的抽象层,所以你可以对抽象层编程然后抽象层与SWT API交互来替代直接对SWT API编程。考虑一下对本地C窗口部件接口编程同使用C++GUI类库的区别或是使用AWT与Swing的区别。这些类比将有助于阐述SWT与JFace的区别。例如,为了使用JFace中的table,你仍旧创建table窗口部件,但是你不向里面插入数据。反而,你将你的content(或model) provider类和你的display(或 view) provider类提供给它。接着,table调用你提供的类来决定数据内容和怎样显示数据内容。 JFace没有彻底地抽象SWT。即使在用JFace写的程序中也会常常出现SWT及它的低级API。在本文第二部分带领您构建正确的SWT基础之后,我们将在第三部分探究JFace的力量。

  总结

  从最开始Java就提供了构建跨平台的窗口GUI应用程序库,从AWT,Swing到现在的SWT和JFace。最初的工具包能力微弱,但是后来提供的工具包认识到之前工具包的缺点并取得了巨大的进步。SWT和JFace不仅使Java成为一个构建桌面应用程序的可行的选择,也使之成为一个具有优势的开发平台。尽管过去对得到轻便和强大的Java系统的尝试必然意味着接受它在GUI方面的缺点,如今这个不足已经不存在了,Java终于可以统领它在桌面计算应用方面的位置了。
【AI辅助生成】QT发展演化路径、技术需求、发展趋势 这篇博客使用AI技术辅助生成。 QT作为一款跨平台的C++图形用户界面应用程序框架。QT作为全球领先的GUI框架之一,发展历程反映了技术演进的轨迹。这篇博客将深入剖析QT的发展历程、技术需求、应用案例及未来趋势。 阅读详情

相关推荐

39、软件演化的新兴趋势与发展挑战

本文探讨了软件演化领域的新兴趋势与技术挑战,涵盖了特殊软件类型的演化研究、机器人软件的发展、软件正确性验证的难点,以及软件迁移、逆向工程等带来的新问题。同时,文章分析了软件演化与技术债务的关系,社会技术网络的影响,跨学科研究的应用前景,以及可重复性研究的重要性。旨在为软件开发者、研究人员和管理者提供应对软件演化复杂性的策略和方向。

cream的博客 160

Java语言的GUI历史

 第1章  Java语言的GUI历史对于图形化操作系统来说,GUI(Graphical User Interface,图形用户接口)是最重要的组成部分。GUI是一组计算机接口,在传统的操作系统 MS-DOS 文字模式下,屏幕上显示的是单调的文字接口,使用者必须通过键盘输入指令才能操作计算机。GUI 的操作环境以图形、图标及窗口方式显示,用户可以通过一个焦点选择工具,如用鼠标来进行操作。GU

Serendipper2008的专栏 1579

Openwork 入门指南:开源 AI 桌面助手快速上手

Openwork是一款开源的AI桌面代理工具,提供类似Claude Cowork的免费替代方案。它支持本地运行,确保隐私安全,并能高效处理文件整理、文档读写等任务。支持多种AI模型,通过MIT许可完全免费。安装简单,仅需运行命令行或下载桌面版,需配置API Key后即可使用。操作直观,支持多步骤规划和权限控制,适合自动化重复工作。目前主要支持macOS,未来将扩展至Windows/Linux。建议从简单任务入手,逐步掌握这一高效的数字助手工具。

3803

Java GUI的发展和演化

Java GUI的发展和演化  概览  当Java在1995年的春天第一次发布的时候,它包含了一个叫AWT(Abstract WindowingToolkit)的库,用来构建图形用户界面应用程序。Java很有雄心的宣言--"write once, runanywhere"许诺:一个具有下拉菜单,命令按钮,滚动条以及其他常见的GUI控件的应用程序将能够在各种操作系统上运

gexinxiaoqu90的专栏 353

离线安装 nvidia-docker2(nvidia-container-toolkit)

很多时候大家都有用docker使用gpu的需求,但是因为网络等原因不是那么好用,这里留了一个给ubuntu的安装包,网络好的话也提供了在线安装方式。

father_yingying的博客 1181

美亚杯取证比赛必备:Veracrypt挂载+检材解压保姆级教程(附常见错误排查)

本文提供美亚杯数字取证竞赛的Veracrypt挂载与检材解压保姆级教程。详细解析从分卷压缩包解压(密码格式为MeiyaCup+年份)到使用Veracrypt正确挂载加密容器的全流程,并附有常见错误排查与高级应急方案,帮助选手高效突破技术门槛,顺利进入取证分析阶段。

alice7model的博客 1058

JAVA入坑之GUI编程

AWT是Java提供的用来建立和设置Java的图形用户界面的基本工具,它提供了一套与本地图形界面进行交互的接口12。AWT的图形函数与操作系统提供的图形函数有着一一对应的关系,也就是说,当使用AWT时,Java程序会调用操作系统的图形函数来绘制界面每类事件都有对应的事件监听器,AWT一共10类事件,11个接口。

qq_62377885的博客 2340

玩转Isaac Sim动态控制:从随机舞动到精准操控Franka的5种控制模式实测

本文深入实测了在NVIDIA Isaac Sim仿真平台中,利用Dynamic Control模块对Franka机械臂进行精准操控的五种核心模式:位置控制、单关节位置控制、速度控制、单关节速度控制和力矩控制。通过详细的代码示例和对比分析,阐述了每种模式的适用场景、参数调优技巧及从随机运动到闭环控制的实现路径,为机器人算法验证提供了实用指南。

night的博客 808

Java GUI编程

swing是一个为Java设计的GUI工具包javax.swing,该包中包含了图形用户界面的各种组件支持。一个Java的图形界面,有各种不同类型的"元素"组成,这些"元素"被称为组件(Component)。swing中的组件可以分为两大类容器(如窗口,对话框,面板)和功能组件(如按钮,输入框,菜单等)。它们的区别主要是概念上的。因为每个容器也都是组件。容器是一种可以包含组件的特殊组件。把类定义在另一个类的内部,该类就被称为内部类。

sixudhjj的博客 1408

ANSYS Discovery 2023R1 保姆级教程:手把手教你玩转几何模型参数化(附避坑指南)

本文提供ANSYS Discovery 2023R1几何模型参数化的全面教程,涵盖基础环境搭建、核心操作解析及高级应用场景。重点讲解参数化建模中的常见问题与避坑方案,帮助用户高效掌握Workbench与Discovery的协同使用技巧,提升工程仿真效率。

weixin_29204205的博客 754

计算机视觉卷积神经网络(CNN)基础:从LeNet到ResNet

计算机视觉卷积神经网络(CNN)基础:从LeNet到ResNet,在计算机视觉领域,卷积神经网络(Convolutional Neural Network,CNN)已然成为推动众多任务发展的核心力量。从早期简单的图像识别,到如今复杂的目标检测、语义分割、图像生成等任务,CNN 都展现出了卓越的性能。CNN 的发展历程见证了一系列经典模型的诞生,其中 LeNet 作为开山之作,为 CNN 的发展奠定了基础,而 ResNet 则通过创新性的设计,突破了传统神经网络的限制,使得网络能够构建得更深、性能更优。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 14万+

跟我学Java之Java GUI的发展和演化

google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//<script type="text/java

java专栏 520

从零开始学习CANoe(六)—— CAPL 测试节点

创建CAPL Test Module的两种方式

蚂蚁小兵 1万+

Java GUI的发展和演化简史[zz]

当<span class="t_tag" onclick="function onclick(){tagshow(event)}">Java在1995年的春天第一次发布的时候,它包含了一个叫AWT(Abstract Windowing Toolkit)的库,用来构建图形用户界面应用程序。Java很有雄心的宣言--"write once, run anywhere"许诺:一个具有下拉菜单

accpsoft2009的专栏 418

NXP S32k3 MCAL EMIOS PWM配置

NXP s32k 配置 EMIOS PWM

Leon_0125的博客 2703

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

第一章 Java GUI的发展和演化

概览  当Java在1995年的春天第一次发布的时候,它包含了一个叫AWT(Abstract Windowing Toolkit)的库,用来构建图形用户界面应用程序。Java很有雄心的宣言--"write once, run anywhere"许诺:一个具有下拉菜单,命令按钮,滚动条以及其他常见的GUI控件的应用程序将能够在各种操作系统上运行而不必重新编译成针对某一平台的二进制代码,包括Micro

理想主义 2062

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

大模型GUI Agents全面综述:GUI Agents发展与演化、架构与设计原则

AI大模型作为人工智能领域的重要技术突破,正成为推动各行各业创新和转型的关键力量。抓住AI大模型的风口,掌握AI大模型的知识和技能将变得越来越重要。学习AI大模型是一个系统的过程,需要从基础开始,逐步深入到更高级的技术。这里给大家精心整理了一份全面的AI大模型学习资源,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享!

m0_56255097的博客 1271

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Java GUI——Java图形用户界面

Java GUI——Java图形用户界面 1、Java GUI概述 1.1、GUI的前世今生 早期,电脑向用户提供的是单调、枯燥、纯字符状态的“命令行界面(CLI)”。如:Windows中的DOS窗口。后来,Apple公司率先在电脑的操作系统中实现了图形化的用户界面(Graphical User Interface,简称GUI),但由于Apple公司封闭的市场策略,与其它PC不兼容。这使得Apple公司错过了一次一统全球PC的好机会。后来,Microsoft公司推出了风靡全球的Windows操...

小仙儿 16万+

全面解析大模型GUI Agents:78页PDF深度综述

(智能体)的综述,探讨了它们的历史演变、核心组件和先进技术。****LLM驱动的GUI智能体的高级概念图示。****智能体接收用户的自然语言请求,并在多个应用程序中无缝地协调动作。它从文档中提取信息,在中观察内容,在中总结网页,在中读取PDF,并在创建幻灯片,然后通过发送它们。GUI Agents发展与演化详细讨论了大型语言模型(LLM)驱动的图形用户界面(GUI)智能体的发展和进步。随机基础自动化:使用随机动作序列进行GUI测试,这种方法在发现潜在问题时有效,但效率低下。

2401_84204207的博客 1351

Java GUI编程中AWT/swing/SWT的优缺点

AWT   AWT是Abstract Window Toolkit(抽象窗口工具包)的缩写,是SUN专门针对JavaGUI编程提供的最早的也是最初的开发工具包,用来建立和设置Java图形用户界面,这个工具包提供了一套与本地图形界面交互的接口。AWT 中的图形函数与操作系统所提供的图形函数之间有着一一对应的关系(peers)。也就是说,当我们利用 AWT 来构件图形用户界面的时候,实际上是在利用...

记事本 1278
上一篇: Java中的内部类和匿名类
下一篇: Java堆的管理--垃圾回收
Image_Graphics
博客等级 码龄20年 18粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值