熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

Java桌面端程序開發

2013-11-23 19:25:32  來源: 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組件,這點是有用
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26851.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.