国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

JFC/Swing活學(xué)活用系列之定制JList顯示

2019-11-18 15:38:32
字體:
供稿:網(wǎng)友
下載本文源代碼

  引言

  在圖形用戶界面方面(GUI),java一直無法與C++、PB、Delphi之類抗衡,使用早期Java/AWT包所開發(fā)的界面實在是讓人不敢恭維。隨著JFC/Swing的日趨成熟,開發(fā)出與可以與C++媲美的GUI不再是"不可能完成的任務(wù)"。除了具有豐富的界面組件之外,以下優(yōu)秀的特性更讓Swing如虎添翼。Swing是以100%純Java實現(xiàn)的,且輔以JDK 1.1 輕量級UI框架為基礎(chǔ),沒有本地代碼,獨立于操作系統(tǒng)之外,基于MVC設(shè)計模式、采用可插入的外觀感覺(PL&F),這都讓我們?nèi)滩蛔∪ジ惺芤幌滤镊攘Α?br />
  完整的JFC十分巨大,Swing只是其中的一部分,本文將著重于Swing包中的JList組件以及如何定制顯示。

  JList基礎(chǔ)知識

  由JList類代表的Swing列表顯示一個可選取對象列表,它支持三種選取模式:單選取、單間隔選取、多間隔選取。

  基于MVC的構(gòu)建思想,JList類不維護對它所顯示的那些對象的引用,而是把數(shù)據(jù)治理工作委托給一個實現(xiàn)ListModel接口的對象;JList類不對其顯示對象的選取操作進行跟蹤和維護,而是把選取治理的工作委托給一個實現(xiàn)ListSelectionModel接口的對象;JList類不繪制其所顯示的對象,而是把列表單元的繪制工作委托給一個實現(xiàn)ListCellRenderer接口的對象。

  JList組件把三個主要的工作(數(shù)據(jù)處理、列表項選取、單元繪制)交給其它對對象來完成,JList的每個實例都維護對上述對象的引用,這樣大大降低了各個功能模塊的耦合度,易于擴展和維護。

  JList如何顯示對象列表?

  缺省情況下,JList對象對圖標(biāo)和字符串對象會按照原樣顯示,而對于其它所有對象只顯示對象toString()方法的返回值。舉個例子吧,有這樣一個應(yīng)用程序顯示java.util.Locale對象列表給用戶,用戶可以通過選擇列表中的項目來改變應(yīng)用程序所的處的語言環(huán)境。

  想象一下,JList將如何顯示一個包含了Locale對象的數(shù)據(jù)模型呢?JList委派javax.swing.ListCellRenderer來顯示這些對象。正如我們所料,ListCellRenderer將把對象toString()方法的返回值顯示出來。然而,Locale對象返回的是ISO代碼,這樣的顯示肯定是不符合"界面交互友好"原則的。默認(rèn)情況下JList所顯示的內(nèi)容讓大多數(shù)用戶感到莫名其妙,如下圖所示:

JFC/Swing活學(xué)活用系列之定制JList顯示

  再來看下面這個例子,更恰如其分地說明了JList對象的缺省顯示并不能對用戶提供任何有意義的數(shù)據(jù)。假設(shè)一個繪圖程序提供了顏色選擇列表,也許你會從中選擇一種顏色用于填充,也許用于繪制線條,或者干什么都可以。盡管我們將java.awt.Color對象實例放入JList中的作法是中規(guī)中矩的,但用戶卻不能從中得到任何的幫助,這背離了我們的初衷。如下圖所示:

JFC/Swing活學(xué)活用系列之定制JList顯示

  Color對象toString()方法返回的是三原色紅、綠、藍(RGB)各分量的亮度值,而不論它所表現(xiàn)的具體顏色是什么。除非用戶知道所選取的第六行0、255、0所代表的是綠顏色,要么我們就應(yīng)該在這個位置顯示一些對用戶更有幫助的信息。

  誠然,你也許可以把java.lang.String對象的實例放入JList中以替代Color對象的實例,但這么做卻放棄了使用JList的目的:用戶是要從列表中選用一種顏色并非是選取一段文本描述。

  當(dāng)使用Color對象時,JList的監(jiān)聽變化的監(jiān)聽器返回的是用戶實際看到的顏色。假如用String對象來替代的話,JList將把String對象返回到監(jiān)聽器,然后監(jiān)聽器再去匹配與之對應(yīng)的顏色來完成填充操作,有點多此一舉的感覺。進入討論組討論。
尋求解決方案

  作為用戶,我們希望的應(yīng)用程序應(yīng)該是界面交互清楚明了的,而不是把Locale對象的ISO代碼或者是顏色的RGB值顯示出來,界面交互友好的軟件才能吸引用戶。ISO代碼或者RGB值對編程的人來說或許有用,但并不適合于終端用戶。

  幸運的是,Locale對象有個displayName屬性適合用來為用戶顯示信息。我們可用該屬性來替代toString()方法用于JList的顯示,這樣一來就能使得JList更具可讀性。比較以下代碼片段中Locale對象的toString()方法和getDisplayName方法的返回值:



發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 弋阳县| 忻城县| 汝州市| 梓潼县| 泰兴市| 沽源县| 肥东县| 上栗县| 卫辉市| 同心县| 大埔区| 台东市| 库车县| 揭西县| 衡水市| 绥中县| 高阳县| 霞浦县| 隆安县| 北流市| 寿光市| 耒阳市| 黎平县| 改则县| 桐梓县| 大方县| 东阿县| 亳州市| 岳阳市| 西安市| 鄱阳县| 柏乡县| 祥云县| 余江县| 湘潭市| 宣汉县| 于田县| 青川县| 荥阳市| 故城县| 丽江市|