999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Java中雙向控件的使用、制作及布局

2007-01-01 00:00:00蔡廣軍

摘 要:介紹了一種國際化控件——雙向控件的使用、制作和布局方法,并介紹了如何設(shè)置控件的方向,設(shè)計(jì)控件的結(jié)構(gòu)和布局控件的原理,以及在此過程中可能遇到的問題和解決方法。

關(guān)鍵詞:雙向控件;繪制器;UI;編輯器;視圖

中圖法分類號:TP311.11文獻(xiàn)標(biāo)識碼:A

文章編號:1001—3695(2007)02—0240—03

1 引言

計(jì)算機(jī)的發(fā)展已使計(jì)算機(jī)的應(yīng)用遍布于世界的每一個(gè)地方,其應(yīng)用日益國際化,由此導(dǎo)致對軟件的國際化需求也逐步成為對軟件需求的一個(gè)主要方面。軟件的國際化是使軟件能滿足多個(gè)地區(qū)和語言的需要,可分為核心國際化、桌面國際化等多個(gè)方面,桌面國際化中要求用戶界面能在只更改本地資源的情況下符合多個(gè)地區(qū)和語言的需要。當(dāng)前主要有兩種語言習(xí)慣:①漢語、英語等從左向右的語言習(xí)慣及對應(yīng)的從左向右的布局風(fēng)格;②阿拉伯語、希伯來語等從右向左的語言習(xí)慣及對應(yīng)的從右向左的布局風(fēng)格,這就要求一種國際化的軟件能同時(shí)適應(yīng)這兩種風(fēng)格的要求。另一方面,當(dāng)前軟件的發(fā)展速度遠(yuǎn)低于硬件的發(fā)展速度,提高軟件的靈活性、可重用性是提高軟件開發(fā)效率的一個(gè)主要方面。為解決兩個(gè)方面的問題,需要開發(fā)一種通用的可在兩種風(fēng)格環(huán)境下使用的控件——雙向控件。雙向控件以從右向左的風(fēng)格顯示如圖1所示。

當(dāng)前的通用語言中,以Java的國際化較好,又具有較強(qiáng)的跨平臺、跨版本的能力。在Java的常用圖形庫中,如AWT,SWING,SWT中,也提供了對雙向控件的基本支持。其中AWT,SWT均由本地系統(tǒng)實(shí)現(xiàn)大部分繪制功能,SWING在上層單獨(dú)實(shí)現(xiàn)了大部分控件的繪制。因此,相對來說SWING具有更好的跨平臺、跨版本的能力,更適合國際化的應(yīng)用開發(fā)。但SWING兼顧問題過多,冗余代碼量大;另一方面與AWT聯(lián)系緊,受本地資源影響仍較大,特別是開發(fā)一些能在多個(gè)地區(qū)、多種語言下運(yùn)行的軟件。例如,在開發(fā)漢語、維吾爾語共用控件時(shí),或在Rich Client下開發(fā)客戶端界面時(shí),在這種系統(tǒng)語言版本和軟件語言版本不同的情況下,SWING類庫的缺點(diǎn)仍很明顯。

本文首先介紹了雙向控件的理論原則,然后就使用、制作、布局中可能遇到的問題,問題的解決方案進(jìn)行了介紹,并提供了一般情況下的處理方案。雙向控件制作過程,是對各種因素進(jìn)行權(quán)衡的過程,對各種軟件特性如靈活性、通用性、效率、成本等如何取舍,是應(yīng)用制作中的主要問題。

2 雙向控件的理論基礎(chǔ)

控件是一種可在多處重復(fù)使用的軟件個(gè)體,要根據(jù)每次使用的特點(diǎn)進(jìn)行裁減。對于雙向控件,就是要能根據(jù)應(yīng)用的要求改變控件的方向?qū)傩裕瑢τ诖蟛糠挚丶粌H要能改變控件整體的方向性,還要能根據(jù)各種習(xí)慣來調(diào)整控件中某些部件的方向性,良好的架構(gòu)是具備這些特性的必要條件,為此要為控件定義一個(gè)合適的軟件架構(gòu)。對雙向控件的架構(gòu)要求,可以用“劃分清晰,適當(dāng)集中”來描述。劃分清晰是指對雙向控件中對方向要求不同的部分能有一個(gè)清晰的劃分,把對方向可能有不同要求的部件區(qū)分出來便于單獨(dú)控制,以減少因?yàn)槟骋稽c(diǎn)不滿足要求而重新制作整個(gè)控件的情況;適當(dāng)集中主要是指要將完成同樣方向控制的內(nèi)容集中到一起,統(tǒng)一完成相應(yīng)的方向控制,集中的程度也根據(jù)具體的情況來定。總之,要在對控件改動最小的情況下,讓控件能根據(jù)要求來改變其方向?qū)傩浴D2顯示了對一個(gè)雙向控件的基本劃分,每部分功能見制作部分。

除了具有良好的架構(gòu)外,雙向控件還要能在控件方向改變時(shí)有改變控件界面的方法。為了減少對平臺的依賴,在此介紹的是一種在繪制時(shí)根據(jù)控件的方向?qū)傩詠碛成淇丶鞑糠肿鴺?biāo)的方法:對由多部件組成的大控件和內(nèi)部需要左右對稱變換的控件采用坐標(biāo)變換的方法。先選一個(gè)常用的方向作為基本方向,現(xiàn)實(shí)中從左向右風(fēng)格的應(yīng)用占絕大多數(shù),常選從左向右為基本方向,然后確定此方向下各個(gè)部件的位置、大小。在以相對方向顯示時(shí),根據(jù)下面坐標(biāo)變換公式:

變換后部件的x坐標(biāo)=部件所在容器的寬度-基本方向下部件的x坐標(biāo)-基本方向下部件的寬度

計(jì)算以相對方向顯示時(shí)部件的坐標(biāo)。由于是在左右方向上變化,公式中用x坐標(biāo)表示要變化的坐標(biāo),部件所在容器指控件要在其中映射的容器,部件所在容器的寬度就是指這個(gè)容器的寬度,如把圖1的對話框看作一個(gè)控件,對其中的按鈕來說,部件所在容器的寬度就是這個(gè)對話框的寬度。

3 雙向控件的使用

在制作雙向控件前要對主要支持雙向布局控件的使用有一定的了解,制作完成后由于使用不當(dāng)也會有很多問題,使用既是對需求了解的過程,也是一種最好的測試。為此,先介紹一下控件的使用。雙向控件使用時(shí)一般只需設(shè)置控件的方向?qū)傩苑椒ǎ丶姆较蛐越缑娓鶕?jù)控件的方向?qū)傩詠砝L制。根據(jù)控件的不同特點(diǎn),分四類來分別介紹一般用法、問題及解決方案。

3.1 無繪制器無編輯器的控件

以標(biāo)簽和按鈕為代表,在需要調(diào)整它們上面圖標(biāo)和文本的相對位置時(shí),需調(diào)用設(shè)置它們相對位置的方法來進(jìn)行設(shè)置;另外需要注意的是方向性圖標(biāo),如滾動條的箭頭按鈕圖標(biāo),在使用時(shí)要與滾動條的方向一致。

3.2 無繪制器有編輯器的控件

主要為文本控件,一般只提供對標(biāo)準(zhǔn)或常用功能的支持,如SWING的文本控件支持Unicode標(biāo)準(zhǔn)雙向算法和一般的換行算法。而對具體的語言可能有特殊的要求,所以使用時(shí)要注意控件的功能是否滿足具體的要求,如光標(biāo)初始位置的確定,各種算法、各種字符的屬性設(shè)置是否與要求一致等,都是要在使用及制作時(shí)需考慮的問題。

3.3 有繪制器無編輯器的控件

主要是列表框和不帶編輯功能的組合框等。這類控件除設(shè)置控件自身方向外,還需注意控件中的繪制器控件的方向,如繪制器控件的方向不符合要求,要先取出控件的繪制器,然后設(shè)置繪制器控件方向。除此之外,還需注意繪制器控件的寬度,當(dāng)繪制器寬度超過控件寬度時(shí),會出現(xiàn)繪制器頭部無法顯示的問題,這就是控件中各部件寬度不一致造成的。使用時(shí)遇到這種問題采用調(diào)整的方法,或者加大控件的寬度把繪制器顯示全,或者設(shè)置繪制器控件的相應(yīng)寬度使其能將首部完全顯示并把不需要的尾部信息截去。在SWING中繪制器的寬度常由最長繪制器的長度確定,這類問題會經(jīng)常出現(xiàn)。

3.4 有繪制器有編輯器的控件

這類控件比較復(fù)雜,如樹與表等,在設(shè)置控件方向時(shí),要確保其每個(gè)部分的方向符合要求。由于控件的總的方向性不一定會導(dǎo)致控件的每一部分均滿足要求,一部分繪制器和編輯器可能需要單獨(dú)設(shè)置。對其中出現(xiàn)的繪制器和編輯器不滿足要求的部分問題,可參照前面的解決方法。另外,需要注意的是要保持控件各部分的一致性,如表或樹中的單元要保持在編輯狀態(tài)編輯器的顯示和非編輯狀態(tài)繪制器顯示之間的一致。具體使用時(shí),具體內(nèi)容的方向性要求也是需要注意的。

表1對每類控件的注意事項(xiàng)進(jìn)行了總結(jié),指出了各類控件在支持雙向控制時(shí)應(yīng)該滿足的要求。此外,除了設(shè)置單個(gè)控件方向的方法外,對容器控件一般還有一個(gè)方法,它不僅設(shè)置容器自身的方向還同時(shí)設(shè)置容器的各子控件的方向。

4 雙向控件的制作

雖然已經(jīng)有支持雙向布局的控件,通過合理地使用也能避免很多問題,但現(xiàn)有的支持雙向布局的控件大多屬于大型的庫,面向的問題面大,結(jié)構(gòu)復(fù)雜,對需要解決的問題不適應(yīng)。雖然這樣的類庫中提供了很多控件,但很多時(shí)候并未提供實(shí)際應(yīng)用中所需的控件。此外,使用部分介紹的問題在有些應(yīng)用中也會對軟件的各個(gè)方面產(chǎn)生極大的負(fù)面影響。為了更快更好地制作國際化軟件,在有些情況下制作雙向控件是必需的。

好的雙向控件首先要有好的架構(gòu)。控件的架構(gòu)很大程度要受應(yīng)用中對控件各種要求的影響,但要制作一個(gè)國際化的雙向控件,一般按圖2 中所示對控件的各部分進(jìn)行劃分即可。其中的控件類負(fù)責(zé)雙向控件共有的與方向有關(guān)的控制,如所有雙向控件都要有方向?qū)傩约捌湓L問方法。具體控件類負(fù)責(zé)一些具體控件特有的和方向有關(guān)的屬性,如在使用部分介紹的對圖形和文本共存的標(biāo)簽,要有對圖形和文本相對位置進(jìn)行設(shè)置的方法。由于各控件的界面差別很大,很難找到所有控件都可使用的方向有關(guān)的繪制,UI類和雙向控件的方向性關(guān)系不大,在雙向控件制作中沒有具體要求,但繪制的其他方面有很多共用的內(nèi)容,它也是不可少的。具體UI類負(fù)責(zé)簡單控件的所有繪制和只隨控件的整體方向而改變方向的內(nèi)容的繪制,有時(shí)還可在此確定控件的繪制器部分和視圖部分的一些方向?qū)傩缘闹怠@L制器類除了擔(dān)負(fù)一般的控件中簡單部件的繪制外,在雙向控件制作中,它主要負(fù)責(zé)一些在控件方向不變時(shí)控件內(nèi)方向可變的部件的繪制。為了方便控件的方向設(shè)置,繪制器的方向默認(rèn)用控件的方向。為了在有些情況下能夠靈活改變控件中繪制器部分的方向,繪制器要提供改變其方向的方法。視圖類負(fù)責(zé)一些方向控制復(fù)雜、整體聯(lián)系強(qiáng)、變化大的內(nèi)容的繪制,如編輯器或文本組件中對文本的繪制,不僅要考慮各種風(fēng)格下文本的繪制,還要考慮各種標(biāo)點(diǎn)符號在各種情況下方向?qū)傩缘拇_定,而且同樣的內(nèi)容很可能會以不同的方向風(fēng)格顯示,對雙向控件中的這些內(nèi)容,由視圖類負(fù)責(zé)繪制。

通過控件使用部分的介紹,可以知道雙向控件的幾個(gè)負(fù)責(zé)繪制的部分不是孤立的,使用中的很多問題均由它們之間的不一致引起,如組合框的問題就是其繪制器部分的方向與整體方向不一致,繪制器與編輯器是否一致也是大多數(shù)問題之所在。此外,雖然雙向控件一般均要有圖 2中的各個(gè)部分,但并不是不可變的。對簡單控件可能不需要繪制器,有很多控件無須復(fù)雜的界面要求,無須視圖部分,有些控件只需要UI,這些情況都是存在的;而對另外一些控件,可能僅具有單個(gè)UI、繪制器、視圖仍不夠,還需要多層UI、繪制器、視圖,有時(shí)可能還需要有設(shè)計(jì)模式的支持才能滿足復(fù)雜的方向要求。控件的結(jié)構(gòu)不僅是可變的,還可以將一類或幾類控件中相同的方向控制的部分提取出來,由一個(gè)統(tǒng)一的方法來進(jìn)行處理,如可以將單行字符串的繪制提取出來。雙向控件的結(jié)構(gòu)中呈現(xiàn)的這種聯(lián)系性和環(huán)境的可變性是在制作中必須權(quán)衡的一個(gè)重要原因。

在雙向控件的UI、繪制器和視圖各繪制部分,均需按其方向來繪制。各個(gè)按方向的繪制部分,可采用如下算法:

設(shè)置控件中各部分的寬度和坐標(biāo);

5 雙向控件的布局

無論是在雙向控件的使用還是制作中,保證雙向控件在兩個(gè)方向都能正確顯示、保證控件布局的正確都是極為重要的。

5.1 如何保證布局的正確

坐標(biāo)映射看似簡單,但要保證控件的繪制正確,首先要注意各種寬度之間的合理性。它一方面包括控件的寬度及其各子控件之間的寬度要合理,各個(gè)子控件的寬度要與其顯示寬度一致,要避免沒有寬度和默認(rèn)寬度不合理的情況;另一方面,Java中控件除了有自身的寬度值外,有時(shí)還設(shè)置首選尺寸、最大尺寸、最小尺寸。在使用一種寬度時(shí),控件中的各部分都要用這種寬度進(jìn)行布局。特別需要注意的是控件的首選尺寸寬度與控件的寬度之間的關(guān)系。在混合使用時(shí),這兩個(gè)寬度值要相等;其次,在計(jì)算后,要保證各種數(shù)值的固定,一般不要改變,否則需重新計(jì)算控件另一方向的坐標(biāo)重新布局。最后,在基本方向布局正確而另一方向布局不正確時(shí),要仔細(xì)查找問題所在。一般不要通過加偏移量來調(diào)整,這樣有時(shí)將會導(dǎo)致更大的錯(cuò)誤。

5.2 布局的方法

在Java中有兩種布局方法:

(1)用布局管理器布局。Java現(xiàn)有類庫中的布局管理器,雖然其中大部分是可以根據(jù)需要來設(shè)置布局方向的,但使用方法很不統(tǒng)一:有的根據(jù)所管理容器的方向來確定控件的布局方向,如GridLayout;有的需要明確指定控件的布局方向,如FlowLayout;有的需要根據(jù)需要來設(shè)置控件的位置,如BorderLayout;有的只是部分支持,如BoxLayout對有些控件不能實(shí)現(xiàn)右對齊。另外,有些完全不提供這方面的支持。布局管理器的布局一般由LayoutContainer( )方法完成。在制作自己所需的支持雙向布局的布局管理器時(shí),可在LayoutContainer( )方法中添加相應(yīng)的代碼段。

(2)絕對坐標(biāo)定位布局。容器根據(jù)控件的絕對坐標(biāo)來布局控件,對這種情況,Java中現(xiàn)有的定位方法和添加方法都不能在控件或容器的方向改變時(shí)改變布局的方法,可以定制自己的定位方法和添加方法。在其中加入根據(jù)方向來布局的代碼,以支持控件或控件中各部件的雙向布局。在進(jìn)行坐標(biāo)映射前,要先計(jì)算所布局容器的寬度。

以上兩種控件布局方法各有其特點(diǎn),布局方法(1)在使控件大小或面板大小能調(diào)整時(shí),或者說能方便調(diào)整時(shí)使用較好;布局方法(2)在控件大小固定時(shí)使用較好。

6 總結(jié)

本文從國際化的應(yīng)用方面介紹了一種控件,以一種應(yīng)用較廣的雙向控件為主介紹雙向控件的原則及其使用、制作、布局,也指出了其中應(yīng)注意的事項(xiàng)。但是,無論是軟件的國際化開發(fā),還是一般控件的制作,都是需要在各種要素之間進(jìn)行權(quán)衡的,特別是國際化的權(quán)衡中,有些并不是技術(shù)所能解決的,為此作為一種國際化的控件,雙向控件自身制作、布局和使用中的有些缺陷不可避免。大多數(shù)時(shí)候都是一個(gè)取舍折中問題,因此,實(shí)際應(yīng)用中不可過分拘泥于文中所述。此外文中雖然對控件的使用、制作、布局是分三個(gè)部分進(jìn)行介紹的,但具體應(yīng)用中很可能是交叉進(jìn)行的,沒有可用控件時(shí),控件制作中涉及到布局,布局過程也是使用控件的過程。在此雖以Java語言為主,但其也適用于其他語言,對一些相關(guān)領(lǐng)域也有一定的借鑒作用。

本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文。

主站蜘蛛池模板: 欧美在线伊人| 久久精品66| 色妞www精品视频一级下载| 一级在线毛片| 国内黄色精品| 在线精品欧美日韩| 特级aaaaaaaaa毛片免费视频| 任我操在线视频| 国产精品3p视频| 国产成人精品男人的天堂| 亚洲成aⅴ人在线观看| 国产门事件在线| 欧美色99| 午夜国产理论| 无码国内精品人妻少妇蜜桃视频| 亚洲三级电影在线播放| 国产无码高清视频不卡| 国产簧片免费在线播放| 乱系列中文字幕在线视频| 青青热久免费精品视频6| 成人午夜久久| 亚洲色图欧美| 久久亚洲国产视频| 亚洲日本在线免费观看| 2022精品国偷自产免费观看| 伊在人亞洲香蕉精品區| 久久精品娱乐亚洲领先| 欧洲亚洲欧美国产日本高清| 亚洲国产成人精品一二区| 刘亦菲一区二区在线观看| 九九精品在线观看| 97人人模人人爽人人喊小说| 国产精品免费久久久久影院无码| 国产噜噜噜| 四虎影视无码永久免费观看| 午夜啪啪网| 国产精品九九视频| 四虎永久在线精品影院| 无码精油按摩潮喷在线播放 | 国产欧美日韩视频一区二区三区| 99久久成人国产精品免费| 无码专区第一页| 久久天天躁狠狠躁夜夜躁| 亚洲男女天堂| 国产欧美日韩资源在线观看| 91无码视频在线观看| 天堂岛国av无码免费无禁网站| 天天激情综合| 亚洲综合香蕉| 日韩欧美91| аⅴ资源中文在线天堂| 日本久久免费| 99福利视频导航| 国产第一色| 国产成人久久综合777777麻豆| 伊人久久久大香线蕉综合直播| 亚洲国产成熟视频在线多多 | 熟女日韩精品2区| 久久天天躁夜夜躁狠狠| 国产无人区一区二区三区 | 国产欧美精品一区二区| 国产欧美视频在线观看| 久久久亚洲色| 国产理论最新国产精品视频| 亚洲精选无码久久久| 亚洲免费黄色网| 欧类av怡春院| 国产中文一区a级毛片视频| 精品一区二区三区视频免费观看| 日韩毛片免费视频| 97se亚洲综合| 18禁黄无遮挡免费动漫网站| 26uuu国产精品视频| 永久免费AⅤ无码网站在线观看| 国内精自视频品线一二区| 视频二区亚洲精品| 美女扒开下面流白浆在线试听| 免费日韩在线视频| 国产精品99r8在线观看| 国产乱人伦偷精品视频AAA| 99久久99这里只有免费的精品| 国产乱子伦无码精品小说|