Java对于服务器,个人电脑和移动设备来说是一项伟大
技术.由于需要java
跨平台
特性,因此java在服务器和移动设备方面
应用是非常成功
。但java在个人电脑应用方面
情况和在服务器及移动设备方面
应用有所不同,但是这很快就会有所改变,至少比你想象得要快。在这篇文章中,我会分析一下java在桌面环境中
应用将怎样得到提升,然后具体说一下java GUI(用户图形接口)
三个主要
工具:AWT, Swing, 和SWT.。在下文中,我将会开发一个完整
java桌面应用程序. 字串8
Java与桌面端
字串1
现在,流行
桌面平台要数Windows、Mac、and Linux了。但它们不是十全十美
,Windows主宰着桌面操作系统
市场,其上有巨大
应用和开发群体,但它昂贵且有许多安全漏洞。Linux有着稳固
基础,它是开源
软件,比Windows更可靠。Macs非常容易操作且不是黑客
目标,但与Windows和Linux比起来,Mac
硬件和软件可选
余地非常
有限。公司和个人选择他们
操作系统基于许多因素。花费少且安全性高是首选
因素,这导致一些组织从Windows 系统转而选择Linux。对许多用户来说,可用性及对原有应用程序
支持是非常重要
因素,这意味着Windows 将继续享有巨大
市场。Mac有其自己忠诚
用户,这使得苹果机仍然可以存活,Linux 在桌面
流行及Mac
成功创造了多样性,这种多样性正是Java需要
,这种多样性使得Java在桌面有举足轻重
地位。
字串2
跨平台
支持
Java 运行于所有相关
操作系统,包括Windows、 Mac和Linux。对于任何组织,他想把现有
应用从一个操作系统移植到另一个操作系统而不用做太多
改动,那么Java正是他们首选
桌面开发平台。或许用微软
可视化工具很容易构建.NET应用,但是这将使你被绑定在了Windows平台上了。 很多人也许想立刻用Linux 代替Windows 从而避免由微软件操作系统
漏洞带来
问题。用户不能容忍
问题之一是当从Windows移植到Linux带来
巨大
费用。如果你
应用程序用Java构建,你就没有了这些问题,Java
图形用户界面看上去会跟你用
操作系统一样,而并不需要做什么改动。 假如有一天又有一种桌面操作系统出现
话,java 是个安全
赌注,因为它现在能够运行在Windows和Linux 上,那么可以推测它也可以运行在将来可能出现
操作系统上,这些操作系统可能或迟或早地由微软,或是开源社区,或是其它
人开发出来。
丰富
特征 字串3
最初,Java只有非常有限
一些特征去构建图形用户界面。思想就是用平台无关
Java应用程序接口打包不同
操作系统
本地图形用户界面,称之为抽象
窗口工具。仅有普通
部件如文件域、文本区、选择框、单选按钮、列表框和按钮被AWT支持,图形和图像
特性支持非常有限,也就是说,只足够构建简单
applet程序。 认识到需要更高级
图形用户界面组件和图形能力,Sun公司开发了Swing,Java 2D,Java 3D,图像
输入/输出,Java高级图像(JAI)和很多其它
。这些中
一些窗体组件现在已经是Java 2标准版(J2SE)里
一部分,并且其它
一些扩展必须和你
应用程序打包在一起。例如Swing、Java 2D、图像
输入/输出都是Java
核心API,随着Java开发工具包(JDK)和Java运行环境一起提供。 字串9
字串8
让我们不要忘了J2EE平台。如果你开发服务器端
应用程序并且需要丰富
图形用户界面,那么你毫无疑问应该选择Java。这允许你把服务器端
一些代码移到客户端,反之亦然。例如:一个项目可能开始是基于WEB和图形界面,在某些时候,用户可能要求图形元素不能在HTML中实现,如果你选择java做客户端应用,那么你可以重用这些当初用来做服务器端
代码。如果你用远程调用,一些类会真正地实现服务器和客户端
共享。通过页面服务器,Java桌面应用也能够和其它
Java 或非Java应用程序通信,如CORBA, TCP/IP,或是 HTTP。 Java图形界面工具
Java有三个主要
图形界面工具:AWT,Swing和SWT。Swing 是构建java图形界面标准
API(应用程序接口),一些AWT类由Swing基础而来。SWT是一个非常有前途
新
窗体工具,由IBM资助。但是事实上,这三者相互补充,他们满足不同
需求。
字串6
AWT
抽象窗口工具集为简单
applet程序设计,它不适宜用来构建丰富
桌面图形界面。但是从开始被介绍,它至少有一个
思想就是布局管理,它负责为组件找到一个放置
位置,这种机制是必需
,因为GUI组件在不同
操作系统中有不同
尺寸。 现在, AWT扩展了组件模型和事件处理机制(由JavaBeans说明定义),新
图形API(称为Java 2D),支持剪贴板和拖拉操作,打印,准入,和新
GUI工具Swing,所有这些都归到Java基础类中(JFC)。 Swing Swing是曾经开发
最复杂
GUI之一。它有一套完全
组件从按钮到文件域到表格,树型和文件编辑器。这些组件不依赖于操作系统本地
部件,而是用原始
图形像直线、矩形、文字画出。这种画代表感观插件,它能够模仿本地
感观。 Swing也有平台无关
外观称为"Metal"。 Swing
结构由MVC模式得到启发,这里在屏幕上
视觉GUI组件和支持数据
模型对象之间有一个明显
分隔,在GUI和数据层之间
通讯基于事件。在最初
Swing版本中有许多错误并且有执行问题,这减慢了接受它
速度。Swing最大
问题是被从事于并且许多人相信它是为开发桌面应用而准备
。今天,有许多基于Swing开发
商业产品,包括大多数
Java集成开发工具,我所喜欢
集成开发工具是Jbuilder,它
速度相当
快。
字串4
SWT 字串7
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 也在进行之中
字串7
误解与Bug
字串6
对于java/Swing一直有着误解,诸如:Java/Swing太慢了,或者是Java/Swing需要更多
内存。Swing也许在老式
奔腾
cpu而且只有32m内存运行JDK1.2运行起来却是很慢。但是如果在PIII级别
CPU有着256mb
内存,运行JDK1。4环境是足够快
。对于一个应用程序来说鼠标在1毫秒和在10毫秒
反映
区别,对于使用者来说看起来是,没什么区别
。Java在企业级
数百人,上千人同时在线
服务器表现
很
。Java在对于有限资源
移动设备上
表现也是很出色
。那为什么Java不能成为很
桌面应用程序呢?以我
观点看,Swing
bug比其运行速度慢这问题还严重。例如,如果你用
是JDK 1.2,你将不能在表格(称为JTable)中输入%&'($#!q 等这些字符。这八个字符和箭头键及Home, End, Pgup, and Pgdn这几个键
键值是相同
。其中一个由JTable由到
类调用了KeyEvent.getCharCode()方法代替KeyEvent.getKeyCode()。这个bug这JDK 1.3已经得到了纠正。你大概已经放弃过Swing,如果你是从用JDK 1.2
Swing,你可能因为你不能在表格里输入q而恼怒。可能不幸
是你正需要用Jtable开发一个Swing应用,你将花费许多时间从sun
bug数据库中查找解决
办法。但没有发现你需要
(记住在那时Swing还是个新事物),你将花费更多
时间去看Swing
源代码和发展中
工作区,经过了这个
经历之后,很少有人很在另一个项目里再用Swing了,你
工作区会像下面这样子:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
public class WorkingTable extends JTable
{
public static final boolean JDK12 = System.getProperty("java.version").startsWith("1.2");
public void processKeyEvent(KeyEvent e)
{
if (JDK12)
{
char ch = e.getKeyChar();
if (e.getID() == KeyEvent.KEY_TYPED && ((33 <= 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; 字串3
textField.setText(textField.getText() ch);
return;
}
}
}
}
super.processKeyEvent(e);
}
} 不幸
是,Swing有许多像上面描述
那样
问题,一些问题很难解决,需要做大量
工作。例如,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组件,这点是有用
。
字串4
字串7
总结: 字串4
Java作为一种网络技术,为了在浏览器中能够运行小应用程序而发布,但是它从开始就有运行独立
桌面应用程序
能力。不幸
是,AWT没有提供足够
桌面端
程序所需
特性。Swing着手于解决这些问题,但是它有不少
bug。今天,Java有构建大型桌面端应用程序
能力并修复了bug。Java独有
优点是“只写一次,到处运行“——在Windows, Linux, Mac和其它操作系统上运行Java代码
能力。 字串8
![我要研发网[www.51dev.com]](/templets/images/toplogo.gif)
