java

位置:IT落伍者 >> java >> 浏览文章

Java桌面端程序开发


发布日期:2024年02月16日
 
Java桌面端程序开发

Java对于服务器个人电脑和移动设备来说是一项伟大的技术由于需要java的跨平台的特性因此java在服务器和移动设备方面的应用是非常成功的但java在个人电脑应用方面的情况和在服务器及移动设备方面的应用有所不同但是这很快就会有所改变至少比你想象得要快在这篇文章中我会分析一下java在桌面环境中的应用将怎样得到提升然后具体说一下java GUI(用户图形接口)的三个主要的工具:AWT Swing 和SWT在下文中我将会开发一个完整的java桌面应用程序

Java与桌面端

现在流行的桌面平台要数WindowsMacand Linux了但它们不是十全十美的Windows主宰着桌面操作系统的市场其上有巨大的应用和开发群体但它昂贵且有许多安全漏洞Linux有着稳固的基础它是开源的软件比Windows更可靠Macs非常容易操作且不是黑客的目标但与Windows和Linux比起来Mac的硬件和软件可选的余地非常的有限公司和个人选择他们的操作系统基于许多因素花费少且安全性高是首选的因素这导致一些组织从Windows 系统转而选择Linux对许多用户来说可用性及对原有应用程序的支持是非常重要的因素这意味着Windows 将继续享有巨大的市场Mac有其自己忠诚的用户这使得苹果机仍然可以存活Linux 在桌面的流行及Mac的成功创造了多样性这种多样性正是Java需要的这种多样性使得Java在桌面有举足轻重的地位

跨平台的支持

Java 运行于所有相关的操作系统包括Windows Mac和Linux对于任何组织他想把现有的应用从一个操作系统移植到另一个操作系统而不用做太多的改动那么Java正是他们首选的桌面开发平台或许用微软的可视化工具很容易构建NET应用但是这将使你被绑定在了Windows平台上了 很多人也许想立刻用Linux 代替Windows 从而避免由微软件操作系统的漏洞带来的问题用户不能容忍的问题之一是当从Windows移植到Linux带来的巨大的费用如果你的应用程序用Java构建你就没有了这些问题Java的图形用户界面看上去会跟你用的操作系统一样而并不需要做什么改动 假如有一天又有一种桌面操作系统出现的话java 是个安全的赌注因为它现在能够运行在Windows和Linux 上那么可以推测它也可以运行在将来可能出现的操作系统上这些操作系统可能或迟或早地由微软或是开源社区或是其它的人开发出来

丰富的特征

最初Java只有非常有限的一些特征去构建图形用户界面思想就是用平台无关的Java应用程序接口打包不同的操作系统的本地图形用户界面称之为抽象的窗口工具仅有普通的部件如文件域文本区选择框单选按钮列表框和按钮被AWT支持图形和图像的特性支持非常有限也就是说只足够构建简单的applet程序 认识到需要更高级的图形用户界面组件和图形能力Sun公司开发了SwingJava DJava D图像的输入/输出Java高级图像(JAI)和很多其它的这些中的一些窗体组件现在已经是Java 标准版(JSE)里的一部分并且其它的一些扩展必须和你的应用程序打包在一起例如SwingJava D图像的输入/输出都是Java的核心API随着Java开发工具包(JDK)和Java运行环境一起提供让我们不要忘了JEE平台如果你开发服务器端的应用程序并且需要丰富的图形用户界面那么你毫无疑问应该选择Java这允许你把服务器端的一些代码移到客户端反之亦然例如一个项目可能开始是基于WEB和图形界面在某些时候用户可能要求图形元素不能在HTML中实现如果你选择java做客户端应用那么你可以重用这些当初用来做服务器端的代码如果你用远程调用一些类会真正地实现服务器和客户端的共享通过页面服务器Java桌面应用也能够和其它的Java 或非Java应用程序通信如CORBA TCP/IP或是 HTTP

Java图形界面工具

Java有三个主要的图形界面工具AWTSwing和SWTSwing 是构建java图形界面标准的API(应用程序接口)一些AWT类由Swing基础而来SWT是一个非常有前途的新的窗体工具由IBM资助但是事实上这三者相互补充他们满足不同的需求

AWT

抽象窗口工具集为简单的applet程序设计它不适宜用来构建丰富的桌面图形界面但是从开始被介绍它至少有一个好的思想就是布局管理它负责为组件找到一个放置的位置这种机制是必需的因为GUI组件在不同的操作系统中有不同的尺寸 现在 AWT扩展了组件模型和事件处理机制(由JavaBeans说明定义)新的图形API(称为Java D)支持剪贴板和拖拉操作打印准入和新的GUI工具Swing所有这些都归到Java基础类中(JFC) Swing Swing是曾经开发的最复杂的GUI之一它有一套完全的组件从按钮到文件域到表格树型和文件编辑器这些组件不依赖于操作系统本地的部件而是用原始的图形像直线矩形文字画出这种画代表感观插件它能够模仿本地的感观 Swing也有平台无关的外观称为Metal Swing的结构由MVC模式得到启发这里在屏幕上的视觉GUI组件和支持数据的模型对象之间有一个明显的分隔在GUI和数据层之间的通讯基于事件在最初的Swing版本中有许多错误并且有执行问题这减慢了接受它的速度Swing最大的问题是被从事于并且许多人相信它是为开发桌面应用而准备的今天有许多基于Swing开发的商业产品包括大多数的Java集成开发工具我所喜欢的集成开发工具是Jbuilder它的速度相当的快

SWT

SWT是IBM为它的Eclipse集成开发环境而开发的图形用户界面工具SWT可以在Eclipse环境外使用而且提供对操作系统本地图形用户界面的直接访问因此基于SWT的Java应用程序拥有本地的图形用户界面并且可以和本地别的应用程序和部件集成在一起 假如你的桌面应用程序产生HTML报表你想把它显示给用户看你可以使用Swing去浏览简单的HTML文档但这不是一个理想的的解决方案最好是在你的应用程序里提供IE或者Mozilla浏览器引擎SWT社区现在正在设计浏览器API这些API可以让你产生基于IE或者Mozilla的HTML窗口 SWT现在可以在AIX HPUX Linux QNX Solaris and Windows下面运行Mac OS X is 也在进行之中

误解与Bug

对于java/Swing一直有着误解诸如Java/Swing太慢了或者是Java/Swing需要更多的内存Swing也许在老式的奔腾的cpu而且只有m内存运行JDK运行起来却是很慢但是如果在PIII级别的CPU有着mb的内存运行JDK环境是足够快的对于一个应用程序来说鼠标在毫秒和在毫秒的反映的区别对于使用者来说看起来是没什么区别的Java在企业级的数百人上千人同时在线的服务器表现的很好Java在对于有限资源的移动设备上的表现也是很出色的那为什么Java不能成为很好的桌面应用程序呢?以我的观点看Swing的bug比其运行速度慢这问题还严重例如如果你用的是JDK 你将不能在表格(称为JTable)中输入%&($#!q 等这些字符这八个字符和箭头键及Home End Pgup and Pgdn这几个键的键值是相同的其中一个由JTable由到的类调用了KeyEventgetCharCode()方法代替KeyEventgetKeyCode()这个bug这JDK 已经得到了纠正你大概已经放弃过Swing如果你是从用JDK 的Swing你可能因为你不能在表格里输入q而恼怒可能不幸的是你正需要用Jtable开发一个Swing应用你将花费许多时间从sun的bug数据库中查找解决的办法但没有发现你需要的(记住在那时Swing还是个新事物)你将花费更多的时间去看Swing的源代码和发展中的工作区经过了这个的经历之后很少有人很在另一个项目里再用Swing了你的工作区会像下面这样子

import javaawt*; import javaawtevent*; import javaxswing*; import javaxswingtable*;

public class WorkingTable extends JTable { public static final boolean JDK = SystemgetProperty(javaversion)startsWith();

public void processKeyEvent(KeyEvent e) { if (JDK) { char ch = egetKeyChar(); if (egetID() == KeyEventKEY_TYPED && (( <= ch && ch <= 40) || ch == 'q')) { int anchorRow = getSelectionModel().getAnchorSelectionIndex(); int anchorColumn = getColumnModel() .getSelectionModel().getAnchorSelectionIndex(); if (anchorRow != -1 && anchorColumn != -1) { if (!isEditing()) editCellAt(anchorRow, anchorColumn); Component editorComp = getEditorComponent(); if (isEditing() && editorComp instanceof JTextField) { JTextField textField = (JTextField) editorComp; textField.setText(textField.getText() + ch); return; } } } } super.processKeyEvent(e); }

}

不幸的是,Swing有许多像上面描述的那样的问题,一些问题很难解决,需要做大量的工作。Tw.WINGWIT.Com例如,Swing的打开文件和保存文件的对话框是基于称为JfileChooser的组件,它部分的执行了JDK 1.2和JDK 1.3(一些特性总是不能用的,要创建一个新的目录对大多数用户来是一个挑战)。我不知道为什么Sun需要几年的时间直到jdk1.4中才完成JfileChooser。在JDK 1.4之前,你有两种选择:用这种破烂的JfileChooser或是创建你自己的文件选择框,Borland公司在他们的JBuilder 4中做一个很好的文件打开对话框。然而,大多数的开发者用的是标准的JfileChooser,给他们的用户带来许多问题。有一件重要的事情需要注意:可以像上面描述的那个去创建工作环境,因为Swing的源代码是可以得到的。学习java源代码也能够让你成为更好的程序员并且让你理解工作在Java API的内部机制。当你开发你自己习惯的GUI组件,这点是有用

上一篇:Java转换大写金额的代码

下一篇:Java中国象棋博弈程序探秘之搜索算法