程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java桌面應用程序開發簡介

Java桌面應用程序開發簡介

編輯:關於JAVA

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 2D,Java 3D,圖像的輸入/輸出,Java高級圖像(JAI)和很多其它的。這些中的一些窗體組件現在已經是Java 2標准版(J2SE)裡的一部分,並且其它的一些擴展必須和你的應用程序打包在一起。例如Swing、Java 2D、圖像的輸入/輸出都是Java的核心API,隨著Java開發工具包(JDK)和Java運行環境一起提供。讓我們不要忘了J2EE平台。如果你開發服務器端的應用程序並且需要豐富的圖形用戶界面,那麼你毫無疑問應該選擇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 2D),支持剪貼板和拖拉操作,打印,准入,和新的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而且只有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;
        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組件,這點是有用的。

總結:

Java作為一種網絡技術,為了在浏覽器中能夠運行小應用程序而發布,但是它從開始就有運行獨立的桌面應用程序的能力。不幸的是,AWT沒有提供足夠的桌面端的程序所需的特性。Swing著手於解決這些問題,但是它有不少的bug。今天,Java有構建大型桌面端應用程序的能力並修復了bug。Java獨有的優點是“只寫一次,到處運行“——在Windows, Linux, Mac和其它操作系統上運行Java代碼的能力。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved