亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

[zt]Master/Details 模式在Eclipse Forms中的應(yīng)

系統(tǒng) 2335 0

From:http://www.eclipseworld.org/bbs/read.php?tid=1296

? Master/Details是UI設(shè)計中常見的一種模式。他有一組(列表或成樹狀結(jié)構(gòu))的master和一個被選中 master驅(qū)動的details集組成。
? ? master是一些不同的對象,通過對master的選擇,驅(qū)動details的UI發(fā)生變化。在下面的圖中,有3各不同的master,分別對應(yīng)3種不同的UI:

描述:1 初始狀態(tài):只有master的樹狀列表
圖片:


描述:2 選中一個master,是一個對象
圖片:
?

描述:3 選中另外一個master,是一個不同的對象
圖片:


描述:4 選中另外一個master,又是一個不同的對象
圖片:
?

首先我們需要一個FormEditor,在這個FormEditor中添加我們要顯示的頁 最后我們只要實現(xiàn)不同的page就可以了。

?

java 代碼
  1. public ? class ?AdvancedFormEditor? extends ?FormEditor{ ??
  2. ??
  3. ?? public ?AdvancedFormEditor(){ ??
  4. ???? super (); ??
  5. ??} ??
  6. ??
  7. ?? protected ? void ?addPages(){ ??
  8. ???? try { ??
  9. ????????addPage( new ?MainPage( this )); ??
  10. ????} catch (PartInitException?e){ ??
  11. ????????e.printStackTrace(); ??
  12. ????} ??
  13. ??} ??
  14. ??
  15. ?? public ? void ?doSave(IProgressMonitor?monitor){ ??
  16. ??
  17. ??} ??
  18. ??
  19. ?? public ? void ?doSaveAs(){ ??
  20. ??} ??
  21. ??
  22. ?? public ? boolean ?isSaveAsAllowed(){ ??
  23. ???? return ? false ; ??
  24. ??} ??
  25. }???

?

然后來構(gòu)造這個頁,ScrolledPropertiesBlock對象就是我們存放master的地方。
在這個ScrolledPropertiesBlock中,我們將masters以樹狀結(jié)構(gòu)顯示出來。

java 代碼
  1. public ? class ?MainPage? extends ?FormPage{ ??
  2. ?? private ?ScrolledPropertiesBlock?block; ??
  3. ??
  4. ?? public ?MainPage(FormEditor?editor){ ??
  5. ???? super (editor, "main" , "Advanced?Form?Editor" ); ??
  6. ????block= new ?ScrolledPropertiesBlock(); ??
  7. ??} ??
  8. ??
  9. ?? /*?ManagedForm封裝了form元素的生命周期管理與各個form元素之間的事件通知 ?
  10. ??*?ManagedForm本身并不是一個form,他包含了一個form并且可以注冊IFormPart。 ?
  11. ??*?可以將ManagedForm看作是'viewers',form和managed?form之間的關(guān)系就好像 ?
  12. ??*?Table與TableViewer的關(guān)系一樣。 ?
  13. ??*/ ??
  14. ?? protected ? void ?createFormContent(IManagedForm?managedForm){ ??
  15. ????ScrolledForm?form=managedForm.getForm(); ??
  16. ????form.setText( "Advanced?Form?Editor" ); ??
  17. ????form.setBackgroundImage(Images.getImage( "icons/form_banner.gif" )); ??
  18. ???? ??
  19. ???? //盡量在最后調(diào)用這個方法 ??
  20. ????block.createContent(managedForm); ??
  21. ??} ??
  22. }???



主要的內(nèi)容還是在ScrolledPropertiesBlock這個類中。
? Eclipse Forms對Master/Details 模式體供了一個實現(xiàn)。具備以下屬性:
1、當details part被創(chuàng)建的時候, master part的工廠方法createMasterPart還是抽象的,必須先被其子類實現(xiàn)。
2、Master and details實際上是sash form的兩個子元素。可以通過調(diào)整sash的大小來改變他們倆的區(qū)域。
3、由于sash form的特性, master 與 details parts可以被橫向或縱向排列。

? ? master/details 塊的目的就是創(chuàng)建一個tree或table section,通過managed form來喚醒selection事件。
? 如果details part可以處理被選中的master對象,他就會切換不同的頁來顯示屬性。

? 當子類在創(chuàng)建頂級master/details時應(yīng)該注意:
1、創(chuàng)建一個用來驅(qū)動details的master part
2、為form tool bar提供actions,一般顯示在form的右上方,與form標題區(qū)同排
3、注冊detail頁,master part可以條用注冊的所有detail

java 代碼
  1. public ? class ?ScrolledPropertiesBlock? extends ?MasterDetailsBlock?{ ??
  2. ?? class ?MasterContentProvider...{ ??
  3. ????...?... ??
  4. ??} ??
  5. ?? class ?MasterLabelProvider...{ ??
  6. ????...?... ??
  7. ??} ??
  8. ??
  9. ?? protected ? void ?createMasterPart( final ?IManagedForm?managedForm,Composite?parent)?{ ??
  10. ????FormToolkit?toolkit?=?managedForm.getToolkit(); ??
  11. ????Section?section?=?toolkit.createSection(parent,?Section.DESCRIPTION|Section.TITLE_BAR); ??
  12. ????section.setText( "模型列表" ); ??
  13. ????section.setDescription( "以下把兩種模型列在表中,可以通過選擇不同的模型在右邊切換編輯頁面進行編輯" ); ??
  14. ????section.marginWidth?=? 10 ; ??
  15. ????section.marginHeight?=? 5 ; ??
  16. ???? ??
  17. ????toolkit.createCompositeSeparator(section); ??
  18. ???? ??
  19. ????Composite?client?=?toolkit.createComposite(section,?SWT.WRAP); ??
  20. ????GridLayout?layout?=? new ?GridLayout(); ??
  21. ????layout.numColumns?=? 2 ; ??
  22. ????client.setLayout(layout); ??
  23. ???? ??
  24. ????Table?t?=?toolkit.createTable(client,?SWT.NULL); ??
  25. ????t.setLayoutData( new ?GridData(GridData.FILL_BOTH)); ??
  26. ???? ??
  27. ???? /* ?
  28. ??????*?為當前parent內(nèi),toolkit所創(chuàng)建的widget添加邊框。如果widget已經(jīng)設(shè)置了SWT.BORDER, ?
  29. ??????*?則不會再為其添加邊框。? ?
  30. ??????*/ ??
  31. ????toolkit.paintBordersFor(client); ??
  32. ???? ??
  33. ????Button?b?=?toolkit.createButton(client,? "添加" ,?SWT.PUSH); ??
  34. ????b.setLayoutData( new ?GridData(GridData.VERTICAL_ALIGN_BEGINNING)); ??
  35. ???? ??
  36. ???? /*?IFormPart管理了整個Part的dirty?state,?saving,?commit,?focus,?selection?changes等等這樣的事件。 ?
  37. ??????*?并不是form中的每一個control都需要成為一個form?part,最好將一組control通過實現(xiàn)IFormPart變成一個Part. ?
  38. ??????*?一般來說Section就是一個自然形成的組,所以Eclipse?Form提供了一個SectionPart的實現(xiàn),它包含一個Section ?
  39. ??????*?的實例。??? ?
  40. ??????*/ ??
  41. ???? final ?SectionPart?spart?=? new ?SectionPart(section); ??
  42. ????managedForm.addPart(spart); ??
  43. ???? ??
  44. ????TableViewer?viewer?=? new ?TableViewer(t); ??
  45. ????viewer.addSelectionChangedListener( new ?ISelectionChangedListener()?{ ??
  46. ???????? public ? void ?selectionChanged(SelectionChangedEvent?event)?{ ??
  47. ??????????managedForm.fireSelectionChanged(spart,?event.getSelection()); ??
  48. ????????} ??
  49. ????}); ??
  50. ????viewer.setContentProvider( new ?MasterContentProvider()); ??
  51. ????viewer.setLabelProvider( new ?MasterLabelProvider()); ??
  52. ????viewer.setInput( new ?SimpleFormEditorInput( "simple?" )); ??
  53. ???? ??
  54. ???? /** ?
  55. ??????*?Sets?the?client?of?this?expandable?composite.?The?client?must?not?be ?
  56. ??????*?null?and?must?be?a?direct?child?of?this?container. ?
  57. ??????*/ ??
  58. ????section.setClient(client); ??
  59. ??} ??
  60. ?? ??
  61. ?? protected ? void ?createToolBarActions(IManagedForm?managedForm)?{ ??
  62. ???? final ?ScrolledForm?form?=?managedForm.getForm(); ??
  63. ????Action?haction?=? new ?Action( "hor" ,?Action.AS_RADIO_BUTTON)?{ ??
  64. ???????? public ? void ?run()?{ ??
  65. ??????????sashForm.setOrientation(SWT.HORIZONTAL); ??
  66. ??????????form.reflow( true ); ??
  67. ????????} ??
  68. ????}; ??
  69. ????haction.setChecked( true ); ??
  70. ????haction.setToolTipText( "橫向排列" ); ??
  71. ????haction.setImageDescriptor(Images.getImageDescriptor( "icons/th_horizontal.gif" )); ??
  72. ???? ??
  73. ????Action?vaction?=? new ?Action( "ver" ,?Action.AS_RADIO_BUTTON)?{ ??
  74. ???????? public ? void ?run()?{ ??
  75. ??????????sashForm.setOrientation(SWT.VERTICAL); ??
  76. ??????????form.reflow( true ); ??
  77. ????????} ??
  78. ????}; ??
  79. ????vaction.setChecked( false ); ??
  80. ????vaction.setToolTipText( "縱向排列" ); ??
  81. ????vaction.setImageDescriptor(Images.getImageDescriptor( "icons/th_vertical.gif" )); ??
  82. ????form.getToolBarManager().add(haction); ??
  83. ????form.getToolBarManager().add(vaction); ??
  84. ??} ??
  85. ?? protected ? void ?registerPages(DetailsPart?detailsPart){ ??
  86. ????detailsPart.registerPage(TopicDatadefSet. class ,? new ?DatadefSetDetailsPage()); ??
  87. ????detailsPart.registerPage(TopicCategory. class ,? new ?TopicCatalogDetailsPage()); ??
  88. ????detailsPart.registerPage(TopicDef. class ,? new ?TopicDetailsPage()); ??
  89. ??} ??
  90. } ??

?

大家應(yīng)該注意到上面的程序中有兩個很重要的方法:

java 代碼
  1. TableViewer?viewer?=? new ?TableViewer(t); ??
  2. viewer.addSelectionChangedListener( new ?ISelectionChangedListener()?{ ??
  3. ?? public ? void ?selectionChanged(SelectionChangedEvent?event)?{ ??
  4. ????managedForm.fireSelectionChanged(spart,?event.getSelection()); ??
  5. ??} ??
  6. }); ??


這里面的event.getSelection()得到的就是這個master的對象,也就是下面這個方法中的
TopicDatadefSet、TopicCategory、TopicDef3個對象。而下面這個方法就是把每個master對象與其detail頁關(guān)聯(lián)起來:

java 代碼
  1. protected ? void ?registerPages(DetailsPart?detailsPart){ ??
  2. ????detailsPart.registerPage(TopicDatadefSet. class ,? new ?DatadefSetDetailsPage()); ??
  3. ????detailsPart.registerPage(TopicCategory. class ,? new ?TopicCatalogDetailsPage()); ??
  4. ????detailsPart.registerPage(TopicDef. class ,? new ?TopicDetailsPage()); ??
  5. }???

?

java 代碼
  1. public ? class ?DatadefSetDetailsPage? implements ?IDetailsPage{ ??
  2. ??...?... ??
  3. }???

?

?

[zt]Master/Details 模式在Eclipse Forms中的應(yīng)用


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久国产精彩视频 | 成人欧美一区二区三区黑人妖 | 99久久免费国产香蕉麻豆 | 亚洲欧美一区二区三区麻豆 | 国内精品自在自线在免费 | aaa毛片视频免费观看 | 亚洲精品乱码久久久久久麻豆 | 亚洲精品国产成人 | 久久草在线视频免费 | 亚洲综合插插 | 中文字幕亚洲色图 | 精品一区二区三区在线观看视频 | 成人黄色小视频 | 亚洲精品综合一区二区三区在线 | 日本一本一道 | 五月天中文字幕 | 午夜精品亚洲 | 久久影院视频 | 久久久久久久久久爱 | 国产又黄又a又潮娇喘视频 国产又色又爽又黄又刺激18 | 国产性大片黄在线观看在线放 | 精品国产第一国产综合精品gif | 九九影院理论片 | 一本伊大人香蕉久久网手机 | 一区二区中文字幕亚洲精品 | 日本一区二区网站 | 伊人888| 国产一区二区不卡视频 | 99精品久久精品一区二区 | 日本成人一区 | 日日艹夜夜艹 | 特级毛片www欧美 | 在线看一级片 | 欧美精品国产一区二区三区 | 欧美成人免费一区在线播放 | 天天干天天草天天射 | 国产日韩欧美一区二区三区综合 | 老太做爰xxxx视频 | 99 久久99久久精品免观看 | 四虎www成人影院免费观看 | 国产色婷婷视频在线观看 |