迷失
          我真的迷失了,迷失了自己,哪里是屬于我的地方?哪里有我的愛?
          posts - 7,comments - 12,trackbacks - 0
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          我的第一個BLOG開張了,慶祝一下!

          常用鏈接

          留言簿(5)

          隨筆檔案

          文章檔案

          自己的網站

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          作者(枯木)

          1.1.        引子

          “從Java誕生至今已有9年時間,而從第二代Java平臺J2SE算起也有5個年頭了。在這樣的背景下,將下一個版本的版本號從1.5改為5.0可以更好的反映出新版J2SE的成熟度、穩定性、可伸縮性和安全性?!?/SPAN> Sun公司如是解釋Java的這次意義深遠的變革。眾所周知Sun公司從發布Java以來,對Java的每一次變更可謂是小心翼翼,特別是經歷了版本一到版本二的變更后,Java一直就停留在比較穩定的時期,這對于一個處于IT行業前沿中的主流技術確實令人難以想象。

          可能對于象Sun這種以技術起家的公司來說,從骨子里就透出一種“不鳴則已,一鳴驚人”的氣質。Java從版本一到二的飛躍中已經初露端倪,那么這次Java的變更又會帶來什么呢?從它發布3個月以來的各方評價,亦可探知一二。其他暫且不論,單從這次變更涉及的面上看就知,這絕非產于一朝一夕,從宏觀上語言特性到具體的API,從Java底層的虛擬機到高層的核心庫,幾乎無一例外的加入了這次變更。如此之大的變更,即便是我這個對Java語言認識不深的人,也能從中略窺一二,但不敢深論,只是學有小得,順道寫些想法,與各位共同學習交流。以下我將對J2SE(TM) 5.0中的用戶接口(UI)部分做一些簡要的介紹。

          1.2.        綜述

          Java一直以來在桌面系統中表現的并不是很成功,究其原因主要是在UI方面表現的不盡如人意,雖然在理論上Sun公司對UI同樣做出了無所不能的承諾,可是一個真正成功的設計不能只停留在理論層面上,而要真正受開發人員認可,在市場中得到青睞才能算得上成功,可JavaUI方面兩者都做的不是很優秀。這次J2SE(TM) 5.0UI方面作了大幅度的調整,大有彌補這方面缺陷的勢頭,對于搶奪在桌面系統的領地是志在必得。關于這次調整的相關評論信息,可以在網上查閱,這里限于篇幅暫且不論。下面將對J2SE(TM) 5.0涉及UI方面的調整做一些介紹,其內容包括:

              1國際化

                 2Java 聲音技術

                 3Java 2DTM)技術

                 4、圖像 I/O

                 5、AWT

                 6、Swing

          上面的各個主題由于本人水平及篇幅所限可能無法一一詳述,有些在這里只能稍作介紹,作為一個引子,其余的還望讀者更多地去思考,去探索。

          1.3.        國際化

          Java語言作為第一種支持國際化的語言,在Internet從一開始就具有其他語言無與倫比的國際化的本質特性:用Unicode來編寫所有的字符串??墒抢碚撆c實際總是不能完全謀和的,因為Unicode本身也在不斷變化。

          J2SE(TM) 5.0中,主要的變化是對java.lang, java.text, java.util.regex等包進行調整,使整個字符處理基于Unicode4.0的標準之上,同時加強了對增補字符的支持(欲了解更多信息請參照:Supplementary Characters in the Java PlatformBy Norbert Lindenberg and Masayoshi Okutsu,)。另外這些調整,已經比較全面地解決了越南等東南亞國家的文字讀寫及顯示問題,雖然并沒有經過大范圍的測試。查看Java所支持的語言及相應的版本信息可以采用以下代碼進行查詢。

          import java.util.*;

          import java.text.*;

           

          public class Test{

           

            public static void main(String[] args) {

              //輸出JVM支持的語言

             Locale locale[] = DateFormat.getAvailableLocales();

               System.out.println("======本地系統支持語言:======== ");

               for (int i = 0; i < locale.length; i++) {

                  System.out.println(locale[i].toString() + "\t" + locale[i].getDisplayName());

               }

           

               //輸出 JVM 默認屬性

               System.out.println("======系統屬性======== ");

               System.getProperties().list(System.out);

            }

          }

          在桌面系統中,J2SE(TM) 5.0的這次變更主要表現在成功地處理了邏輯字體的多語言文本支持,例如,如果您在泰國語環境中,但已經安裝了韓國語的字體,就可以呈現泰國語和韓國語,這只需通過java.util.Locale類進行相應的操作即可方便地達到應有的目標。還同時解決了在 Windows 2000/XP 中,AWT調用 Unicode API的問題。這樣在J2SE(TM) 5.0中就可以運用它自帶的一些文本組件進行文本處理,而不用受到 Windows locale 設置的限制,增強了Java跨平臺的功能,使Java真正能夠相對地獨立于Windows平臺。例如,AWT 文本組件可以在梵文書寫系統中接受和顯示文本,并不用關心 Windows locale 的設置,而僅僅依靠Java程序內部的處理機制。

                 另外,在java.nio包中也增強了對I/O傳輸國際化的支持。這在核心庫中已經有所介紹了,這里就不在重復了。

          1.4.        Java聲音技術

          聲音技術在Java的領域里應該算是一個比較專業,對于很多非專業的開發者可能會很陌生,讀者如果希望對這方面知識進行更全面的了解,還請參閱JavaTM Sound Programmer Guide。以下僅列出J2SE(TM) 5.0在聲音處理技術中改進的部分:

          1、  現在端口可在所有平臺上使用(RFE 4782900)。

          2、  現在 MIDI 設備 I/O 可在所有平臺上使用(RFE 4812168 RFE 4782924)。

          3、  在所有平臺上實現了優化的直接音頻訪問 (RFE 4908240 RFE 4908879)。在提供本機混合的系統上(如具有硬件混合的 Linux ALSA、啟用的 Solaris Mixer Windows DirectSound),默認情況下啟用了它。

          4、  新的實時序列與所有 MIDI 設備一起工作,并允許無限地進行傳送(RFE 4773012)。

          5、  sound.properties 配置文件允許選擇默認設備(RFE 4776511)。 有關更多信息,請參見 MidiSystem AudioSystem

          6、  MidiDevices 可以查詢連接的接收器和傳送器(RFE 4931387, MidiDevice.getReceiver MidiDevice.getTransmitter 方法)。

          7、  AudioFormat、AudioFileFormat MidiFileFormat 現在具有一些屬性來允許進一步描述和限定格式 RFE 4925767 RFC 4666845)。

          8、  一組易用的方法集允許更加容易地從 AudioSystem 檢索行(RFE 4896221)。

          序列接口是用循環方法擴展的,它可以在 MIDI 序列的特定部分進行無縫循環。(RFE 4204105)。

          9、Java Sound 不再禁止 VM 退出(bug 4735740)。

          1.5.        Java 2D技術及圖像 I/O

          J2SE(TM) 5.0Java 2D技術及圖像I/O方面在應用方面并沒有進行過多的更改,多數還是保持在原來的狀態,但是很多更改的部分在Java語言中扮演著重要的角色,而且其中的更改部分仍然代表著Java語言一貫堅持的前進方向。J2SE(TM) 5.0之前所有針對圖象操作  BufferedImage內增加了預讀功能,并適時地針對圖象處理加入了一些硬件加速的處理方法,如:Image類中的setAccelerationPriority and getAccelerationPriority

          另外,還添加了 2D 特性包括擴展的 Linux Solaris 打印機支持、用于從文件和流中創建字體的新方法和與 VolatileImages 和圖像的硬件壓縮有關的新方法。對文本呈現代碼的大量更改大大提高了它的強健性、性能和可伸縮性。其他性能工作包括在 Linux Solaris 上使用 OpenGL 進行硬件加速呈現(默認情況下是禁用的)。以上性能的引入將使Java語言在桌面系統中的應用變得更加簡單實用。

                 而在圖像 I/O方面,增加了具有針對 BMP WBMP 格式的閱讀器和編寫器,即可以用XML語言進行控制來處理相應的圖像,增強了整個系統的重用性。

          1.5.1.    AWTSwing

          J2SE(TM) 5.0版本提供了許多 AWT 增強功能和修補程序,其中包括一些客戶經常要求的一些增強功能和修補程序。特別是新的 MouseInfo 類使得可以決定桌面上鼠標的位置。新的 Window 方法使得可以根據平臺來指定最近創建的窗體(或幀)的默認位置。另一個窗口增強功能使得可以保證窗體(或幀)總是處在最上層(對于 Solaris/Linux 上的一些窗體處理器,這種特性是不能工作的)。在數據轉換方面,新的 DropTargetDragEvent API 使得在拖動過程中可以讓目標訪問傳送的數據。這些API的引入不管從哪一方面都在很大程度上增強了Java語言的易用性。

          Swing在這次Java的變更中扮演著一個極其重要的角色,它的變更已經不僅僅停留在更改幾個API,而是在實現的理念里添加進了新的實現元素,這勢必會影響Java在桌面系統應用里UI的構架設計。SwingJava在桌面系統中最主要的應用技術,從其出現伊始就廣受人們的關注,而且Sun公司也一直將它作為Java在桌面系統的主流技術進行推廣。在J2SE(TM) 1.4.2 中, Swing 提供了兩種外觀:XP GTK。但這沒有到此就停止,在J2SE(TM) 5.0Swing為我們提供了另外兩種外觀:Synth —— 可切換皮膚的外觀和 Ocean —— 針對 Metal 的新主題。摒棄了1.4默認的陳舊的Metal外觀之后,J2SE(TM) 5.0引入了一個全新的Ocean外觀。以Sun公司 SwingSet2演示程序作為向導,比較 Meta 外觀的原有主題 Steel Metal 外觀的 Ocean 主題(如下圖)。另外,我們不得

                        

            Metal Steel 主題                      Metal Ocean 主題  

          不提起的是Synth,它是一個完整的外觀,而不是一個主題,它針對的并不是程序員,而是界面設計人員,讓他們不必掌握Java知識便能夠進行相應界面的選擇定制。采用了Synth后,我們不能從現有外觀或主題派生子類、修改字體或顏色,而是通過轉載不同的XML 文件以達到對相應界面的控制。其實現步驟包括將程序外觀設置成Synth模式以及編輯相對應的XML文件。設置Synth外觀模式,可以使用以下代碼:

            SynthLookAndFeel synth = new SynthLookAndFeel();

            Class aClass = SynthTest.class;

            InputStream is = aClass.getResourceAsStream("file1.xml");

            synth.load(is, aClass);

            UIManager.setLookAndFeel(synth);

          對于 XML 中的大多數事情來說,文件的內容由文檔類型定義(DTD)描述。只要在 XML 文件中描述組件,然后把文件傳給 SynthLookAndFeel 實例的 load() 方法,應用程序的外觀就會有所不同。以下是XML控制程序外觀的代碼:

          <synth>

            <style id="button">

              <font name="Dotum" size="24" style="BOLD"/>

              <state value="MOUSE_OVER">

                <font name="System" size="48" style="ITALIC"/>

              </state>

            </style>

            <bind style="button" type="region" key="Button"/>

          </synth>

           

                          

          以下附上Synth的演示代碼SynthTest.java,與其相對應的XML文件可選用上面的示例代碼,將其更名為synth.xml即可:

          import java.io.InputStream;

          import java.text.ParseException;

          import javax.swing.JButton;

          import javax.swing.JFrame;

          import javax.swing.UIManager;

          import javax.swing.plaf.synth.SynthLookAndFeel;

           

          public class SynthTest{

           

            private static void createGUI(){

              SynthLookAndFeel synth = new SynthLookAndFeel();

              try {

              Class classA = SynthTest.class;

                  InputStream in = classA.getResourceAsStream("synth.xml");

                  if (in == null) {

                     System.err.println("Unable to find theme configuration");

                     System.exit(-1);

                  }

                  synth.load(in, classA);

              } catch (ParseException e) {

              System.err.println("Unable to load theme configuration");

              System.exit(-2);

              }

              try {

              UIManager.setLookAndFeel(synth);

              } catch (javax.swing.UnsupportedLookAndFeelException e) {

                   System.err.println("Unable to change look and feel");

              System.exit(-3);

              }

              JFrame frame = new JFrame("Test Synth");

              frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

              JButton button = new JButton("Hello Synth");

              frame.add(button);

              frame.setSize(400, 200);

              frame.setVisible(true);

            }

             

            public static void main(String[] args){

              javax.swing.SwingUtilities.invokeLater(new Runnable(){

                  public void run() {

                  createGUI();

                   }

              });

            }

          }

          除了外觀的調整之外,J2SE(TM) 5.0已經添加了對 JTable的打印支持,這使得可以容易地獲取 JTable 的漂亮打印副本。另外,在Java語言發展了多年后,J2SE(TM) 5.0終于實現了 JFrame.add() 等價于 JFrame.getContentPane().add()。

          1.6.        結束語

          以上介紹的內容僅僅與大家共同領略了J2SE(TM) 5.0所帶來的新的UI元素,不圖窺一斑而知全豹,但從中仍然能看出Java前進的步伐,愿Java一路走好!

          posted on 2005-07-18 22:18 永琪 閱讀(98) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 蓝山县| 西畴县| 梁山县| 临湘市| 宝清县| 东海县| 台北县| 昌吉市| 杭锦旗| 淮安市| 景德镇市| 江口县| 东乡族自治县| 宜阳县| 治县。| 凤台县| 宜春市| 灵丘县| 司法| 正宁县| 腾冲县| 县级市| 巧家县| 德兴市| 泽库县| 纳雍县| 吕梁市| 开阳县| 大冶市| 杂多县| 庆云县| 张掖市| 星子县| 林芝县| 太原市| 青浦区| 威海市| 武城县| 阳江市| 慈利县| 涪陵区|