自定義Dialog很簡單,下邊我們來一步步實現(xiàn)自定義Dialog
一、寫一個類,繼承自Dialog










好了,寫好了,如何運行呢?
再寫一個類:













好了運行一下看到效果了吧,帶有兩個button.
二、看到上邊的代碼是否會想到別的呢?為什么要再寫一個類來運行Dialog,不能在內(nèi)部寫個main方法嗎?
我們來試一下:
方法一:參考Jface hello world的的寫法:

















運行一下看看什么效果,提示找不到main方法。且打印出如下Exception
java.lang.ExceptionInInitializerError
Caused by: java.lang.NullPointerException
?at org.eclipse.jface.resource.JFaceResources.getResources(JFaceResources.java:184)
?at org.eclipse.jface.resource.JFaceResources.getImageRegistry(JFaceResources.java:310)
?at org.eclipse.jface.dialogs.Dialog.<clinit>(Dialog.java:211)
Exception in thread "main"
為什么呢?我們是有main方法的,跟進Exception去看看吧。
發(fā)現(xiàn)問題出現(xiàn)在Dialog類的這段代碼上:










原來在靜態(tài)代碼塊上出現(xiàn)了Exception,造成在運行main函數(shù)之前就退出了。所以才說沒有main函數(shù)。
我們知道classload在加載一個類的時候,對于靜態(tài)代碼塊會逐行執(zhí)行,按照出現(xiàn)的先后順序。同時父類的靜態(tài)代碼塊一定比子類的先執(zhí)行。因為
在load子類之前會先load父類。這就是為什么hello world中不會出現(xiàn)問題,這里會出現(xiàn)問題的原因。因為Dialog比ApplicationWindow多了這段靜態(tài)代碼。
繼續(xù)追下去為什么這段代碼會出現(xiàn)空指針異常呢,原來這段代碼依賴于new Shell()必須先運行。而我們的new Shell()寫在main方法里邊,肯定是在加載類完成后才能運行的。所以在類內(nèi)部直接寫個main方法是不行的。只能單獨寫個類來調(diào)用。
方法二:
單獨寫個類如下:












依然是不行的,報同樣的錯誤,為什么?仔細看一下,我們把new Shell()寫在構(gòu)造函數(shù)的參數(shù)里,其實范了和剛才同樣的錯誤。所以單獨提出new Shell(),寫在構(gòu)造函數(shù)之前。就得到了文章開始的Test類。平時我們使用的時候為什么不出這個問題呢?因為我們平時使用的時候Dialog從里不是單獨存在的,在之前shell早被構(gòu)造過了。反而是demo更容易出這個問題。
好了,上邊只是個小插曲,繼續(xù)我們的自定義Dialog.
三、去掉兩個按鈕
雖然Dialog天生帶的兩個按鈕不錯,但我們有的時候并不想要這兩個按鈕,怎么辦,如何去掉它?
簡單,只要我們覆蓋父類的createButtonsForButtonBar這個方法就可以了,覆寫這個方法,里邊什么也不寫


看一下按鈕消失了。
四、加入右上角的最大化和關(guān)閉
覆寫父類的這個方法:



五、改變Dialog的大小
覆寫這個方法:



六、加入自己的控件
覆寫createDialogArea方法







這里使用了RowLayout
七、加入自己的按鈕
覆寫initializeBounds




好了這里自定義Dialog完成了,然后根據(jù)你的需要再Dialog中添加更負載的控件,更多的按鈕。最后目的當(dāng)然是從Dialog取道數(shù)值。
八、帶提示框的Dialog
使用方法和前邊相同,不同的是不是繼承自Dialog而是繼承自TitleAreaDialog,然后在createDialogArea中加入兩行



更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
