Java對於服務器
個人電腦和移動設備來說是一項偉大的技術
由於需要java的跨平台的特性
因此java在服務器和移動設備方面的應用是非常成功的
但java在個人電腦應用方面的情況和在服務器及移動設備方面的應用有所不同
但是這很快就會有所改變
至少比你想象得要快
在這篇文章中
我會分析一下java在桌面環境中的應用將怎樣得到提升
然後具體說一下java GUI(用戶圖形接口)的三個主要的工具:AWT
Swing
和SWT
在下文中
我將會開發一個完整的java桌面應用程序
Java與桌面端 現在
流行的桌面平台要數Windows
Mac
and 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公司開發了Swing
Java
D
Java
D
圖像的輸入/輸出
Java高級圖像(JAI)和很多其它的
這些中的一些窗體組件現在已經是Java
標准版(J
SE)裡的一部分
並且其它的一些擴展必須和你的應用程序打包在一起
例如Swing
Java
D
圖像的輸入/輸出都是Java的核心API
隨著Java開發工具包(JDK)和Java運行環境一起提供
讓我們不要忘了J
EE平台
如果你開發服務器端的應用程序並且需要豐富的圖形用戶界面
那麼你毫無疑問應該選擇Java
這允許你把服務器端的一些代碼移到客戶端
反之亦然
例如
一個項目可能開始是基於WEB和圖形界面
在某些時候
用戶可能要求圖形元素不能在HTML中實現
如果你選擇java做客戶端應用
那麼你可以重用這些當初用來做服務器端的代碼
如果你用遠程調用
一些類會真正地實現服務器和客戶端的共享
通過頁面服務器
Java桌面應用也能夠和其它的Java 或非Java應用程序通信
如CORBA
TCP/IP
或是 HTTP
Java圖形界面工具 Java有三個主要的圖形界面工具
AWT
Swing和SWT
Swing 是構建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由到的類調用了KeyEvent
getCharCode()方法代替KeyEvent
getKeyCode()
這個bug這JDK
已經得到了糾正
你大概已經放棄過Swing
如果你是從用JDK
的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 JDK
= System
getProperty(
java
version
)
startsWith(
);
public void processKeyEvent(KeyEvent e) { if (JDK
) { char ch = e
getKeyChar(); if (e
getID() == KeyEvent
KEY_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組件,這點是有用
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26851.html