精简SWT FormLayout的用法
出于對(duì)效率的追求,我最近重新考慮了SWT FormLayout的可用性。 盡管就靈活性而言,它是我最喜歡的核心布局之一,但我不得不認(rèn)識(shí)到,大多數(shù)同事都不情愿地使用它。 考慮到面部反應(yīng),建議將其建議用于適當(dāng)?shù)娜蝿?wù)有時(shí)實(shí)際上會(huì)造成真正的身體疼痛……
確實(shí),在仔細(xì)檢查之后,人們不得不承認(rèn)這種用法至少有點(diǎn)麻煩。 布局本身與其所到達(dá)的每個(gè)控件的FormData配置FormData 。 下面的代碼片段顯示了一個(gè)簡(jiǎn)單的用例–好吧,我不會(huì)破壞自己發(fā)現(xiàn)它的作用的樂(lè)趣:
當(dāng)然,每個(gè)人都可以弄清楚代碼的功能。 但是它確實(shí)具有真正解決問(wèn)題的想法–我想這是問(wèn)題的一部分。 那么,如何以下面的方式編寫(xiě)這種不太冗長(zhǎng)但仍然更具表現(xiàn)力的代碼:
Label label = new Label( composite, SWT.NONE ); attach( label ).atTop().atRight().atBottom().atLeft();盡管它絕對(duì)更緊湊,但在旁觀者看來(lái),至少在某種程度上來(lái)說(shuō),表現(xiàn)力在很大程度上取決于人們眼前的任務(wù)所具有的隱喻。 在我的想象中, FormLayout基本上將控件邊界附加到某些參考點(diǎn),即頂部atTop ,這意味著它始終將控件的頂部保持在父級(jí)客戶(hù)區(qū)域的上限。
或者,它在頂部將一個(gè)控件附加到另一個(gè)控件,這意味著該控件的上側(cè)始終與另一個(gè)控件的底部對(duì)齊。 此外,可以將一個(gè)邊附加到與各自客戶(hù)區(qū)綁定的百分比范圍內(nèi),所有這些都可以這樣表示:
attach( control ).atLeftTo( otherControl ).fromTop( 20 );以此思路,我開(kāi)發(fā)了一個(gè)名為FormDatas實(shí)用程序小類(lèi),以將概述的思想付諸實(shí)踐。 該類(lèi)提供了一個(gè)靜態(tài)方法attach來(lái)創(chuàng)建FormData的新實(shí)例,該實(shí)例在作為參數(shù)指定的控件處注冊(cè)。 返回的布局?jǐn)?shù)據(jù)實(shí)例由FormDatas對(duì)象包裝,以啟用配置方法1的流暢接口樣式。
另外,還有很多方法變體可以處理,例如邊距或?qū)R的概念。 邊距基于基礎(chǔ)的Attachment#offset屬性,但實(shí)際上尊重附件的一面。 因此,5 atRight的邊距對(duì)應(yīng)于已使用分子100分配給FormData#right屬性的Attachment的偏移量-5:
attach( label ).atRight( 5 );的縮寫(xiě)
FormData formData = new FormData(); label.setLayoutData( formData ); formData.right = new FormAttachment( 100, -5 );對(duì)齊由Attachment#alignment屬性支持,并使用相應(yīng)的SWT常量。 例如,要將控件的頂部附件調(diào)整到另一個(gè)控件的中心,請(qǐng)使用以下代碼:
attach( control ).atTopTo( otherControl, MARGIN, SWT.CENTER );這是另一種情況,顯示了如何使用寬度提示而不是相對(duì)的側(cè)面附件:
attach( control ).atTop().atRight().atBottom().withWidth( WIDTH );值得一提的是, FormDatas實(shí)現(xiàn)并未涵蓋FormData和FormAttachment所有可能性。 但是,由于我能夠替換當(dāng)前項(xiàng)目中的所有用例,因此希望能夠滿(mǎn)足更常見(jiàn)的用例。
從IDE的角度來(lái)看,集成FormDatas的最佳方法是將其配置為收藏 。 這樣,可以通過(guò)自動(dòng)處理靜態(tài)導(dǎo)入等內(nèi)容的內(nèi)容輔助使用FormDatas.attach(Control)方法。
如果您想自己看看FormDatas ,那么有一個(gè)包含實(shí)現(xiàn)的GitHub要點(diǎn) 。 但是請(qǐng)記住,我沒(méi)有花任何時(shí)間在文檔,參數(shù)驗(yàn)證等方面。 在這方面,該實(shí)用程序是一個(gè)很粗糙的版本,可能會(huì)隨著時(shí)間的推移而發(fā)展。
https://gist.github.com/fappel/9867945
要點(diǎn)包含F(xiàn)ormDatas和JUnit測(cè)試用例,因?yàn)樵搶?shí)現(xiàn)旨在在生產(chǎn)環(huán)境中使用,因此應(yīng)進(jìn)行測(cè)試。
翻譯自: https://www.javacodegeeks.com/2014/04/slim-down-swt-formlayout-usage.html
總結(jié)
以上是生活随笔為你收集整理的精简SWT FormLayout的用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java 8发布了! — Lambdas
- 下一篇: IntelliJ中的实时模板