京山游俠

          專注技術,拒絕扯淡
          posts - 50, comments - 868, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理
          使用Eclipse RCP進行桌面程序開發(一):快速起步
          使用Eclipse RCP進行桌面程序開發(二):菜單、工具欄和對話框

          Eclipse RCP開發中,和用戶進行交互最多的界面,應該是視圖了,而透視圖就是將已有的視圖、菜單、工具欄、編輯器等等進行組合和布局??赐赀@一節,我們就可以建立如下圖這樣的程序界面了。

          rcp25.JPG

          首先我們來介紹一下視圖,建立一個視圖其實非常簡單,只要從org.eclipse.ui.part.ViewPart繼承一個類,然后在plugin.xml中進行視圖的配置。其中,向視圖中添加控件的操作,我們即可以手工編寫,也可以使用Designer插件,我這里推薦大家使用Designer插件,該插件對RCP提供功能非常強大的支持,如果使用Designer插件開發視圖,則plugin.xml文件也不需要我們手動修改了。

          比如我們上圖中的第一個視圖,就是從ViewPart繼承一個類,然后在上面加入了幾個swt的控件,做得非常得簡單,而它的配置文件如下:
          1<extension
          2?????????point="org.eclipse.ui.views">
          3??????<view
          4????????????class="cn.blogjava.youxia.views.FirstView"
          5????????????id="cn.blogjava.youxia.views.FirstView"
          6????????????name="第一個View"/>
          7</extension>

          可以看到,實現這個視圖的class為cn.blogjava.youxia.views.FirstView,那么我們看看FirstView.java吧:
          ?1package?cn.blogjava.youxia.views;
          ?2
          ?3import?org.eclipse.jface.action.IMenuManager;
          ?4import?org.eclipse.jface.action.IToolBarManager;
          ?5import?org.eclipse.jface.viewers.TableViewer;
          ?6import?org.eclipse.swt.SWT;
          ?7import?org.eclipse.swt.widgets.Composite;
          ?8import?org.eclipse.swt.widgets.Label;
          ?9import?org.eclipse.swt.widgets.Table;
          10import?org.eclipse.swt.widgets.Text;
          11import?org.eclipse.ui.part.ViewPart;
          12
          13public?class?FirstView?extends?ViewPart?{
          14
          15????private?Table?table;
          16????private?Text?text_1;
          17????private?Text?text;
          18????public?static?final?String?ID?=?"cn.blogjava.youxia.views.FirstView";?//$NON-NLS-1$
          19
          20????/**
          21?????*?Create?contents?of?the?view?part
          22?????*?@param?parent
          23?????*/

          24????@Override
          25????public?void?createPartControl(Composite?parent)?{
          26????????Composite?container?=?new?Composite(parent,?SWT.NONE);
          27
          28????????final?Label?label?=?new?Label(container,?SWT.NONE);
          29????????label.setText("姓名:");
          30????????label.setBounds(56,?41,?36,?12);
          31
          32????????text?=?new?Text(container,?SWT.BORDER);
          33????????text.setBounds(98,?38,?80,?15);
          34
          35????????final?Label?label_1?=?new?Label(container,?SWT.NONE);
          36????????label_1.setText("性別:");
          37????????label_1.setBounds(212,?41,?30,?12);
          38
          39????????text_1?=?new?Text(container,?SWT.BORDER);
          40????????text_1.setBounds(252,?38,?80,?15);
          41
          42????????final?TableViewer?tableViewer?=?new?TableViewer(container,?SWT.BORDER);
          43????????//tableViewer.setInput(new?Object());
          44????????table?=?tableViewer.getTable();
          45????????table.setBounds(56,?75,?374,?143);
          46????????table.setItemCount(10);
          47????????table.setLinesVisible(true);
          48????????//
          49????????createActions();
          50????????initializeToolBar();
          51????????initializeMenu();
          52????????????}

          53
          54????/**
          55?????*?Create?the?actions
          56?????*/

          57????private?void?createActions()?{
          58????????//?Create?the?actions
          59????}

          60
          61????/**
          62?????*?Initialize?the?toolbar
          63?????*/

          64????private?void?initializeToolBar()?{
          65????????IToolBarManager?toolbarManager?=?getViewSite().getActionBars()
          66????????????????.getToolBarManager();
          67????}

          68
          69????/**
          70?????*?Initialize?the?menu
          71?????*/

          72????private?void?initializeMenu()?{
          73????????IMenuManager?menuManager?=?getViewSite().getActionBars()
          74????????????????.getMenuManager();
          75????}

          76
          77????@Override
          78????public?void?setFocus()?{
          79????????//?Set?the?focus
          80????}

          81
          82????}


          其中,添加控件的代碼由Disgner插件自動生成。這個時候,如果我們運行程序的話,我們的視圖還不會被顯示出來。為了讓我們的視圖可以顯示,我們還需要修改Perspective.java文件,代碼如下:

          ?1package?cn.blogjava.youxia.rcp_start;
          ?2
          ?3import?org.eclipse.ui.IPageLayout;
          ?4import?org.eclipse.ui.IPerspectiveFactory;
          ?5
          ?6public?class?Perspective?implements?IPerspectiveFactory?{
          ?7
          ?8????public?void?createInitialLayout(IPageLayout?layout)?{
          ?9????????String?editorArea?=?layout.getEditorArea();
          10????????layout.addView("cn.blogjava.youxia.views.FirstView",?IPageLayout.RIGHT,?0.2f,?editorArea);
          11????}
          12}

          運行程序,得到如下效果:

          rcp23.JPG

          我們可以發現,上面這個視圖的標簽不是我們通常看到的波浪形,我們可以通過配置文件的方式來更改產品的樣式。
          首先,在plugin.xml中對org.eclipse.core.runtime.products擴展點的屬性進行更改,如下:

          ?1<extension
          ?2?????????id="product"
          ?3?????????point="org.eclipse.core.runtime.products">
          ?4??????<product
          ?5????????????application="cn.blogjava.youxia.rcp_start.application"
          ?6????????????name="第一個RCP程序">
          ?7?????????<property
          ?8???????????????name="preferenceCustomization"
          ?9???????????????value="plugin_customization.ini"/>
          10??????</product>
          11</extension>

          可見,我們為我們的產品添加了一個prefereneCustomization屬性,該屬性的值為plugin_customization.ini文件,在該文件中,我們可以配置我們的樣式。在這里,它的內容如下:
          1org.eclipse.ui/SHOW_TRADITIONAL_STYLE_TABS=false
          2org.eclipse.ui/DOCK_PERSPECTIVE_BAR=topRight

          事實上,在這個文件中可以定義的參數有上百個,大家可以查看Eclipse的文檔。
          這個時候,效果應該是這樣的了:
          rcp24.JPG

          好了,我們現在對以上的代碼做一個總結。我不是寫教科書,在Blog中也沒有寫得那么詳細的條件。我們這里主要關注在哪個地方對代碼進行擴展,可以達到我們想要的效果。比如,我們要創建視圖,就是需要擴展org.eclipse.ui.part.ViewPart類,然后向其中添加控件,再然后配置plugin.xml文件,最后修改透視圖的代碼,以便它能夠顯示出來。

          在ViewPart類中,我們添加控件的操作主要是在public void createPartControl(Composite parent)這個方法中進行,而方法最后會調用以下三個方法:
          createActions();
          initializeToolBar();
          initializeMenu();
          從這三個方法的方法名我們不難看出,它們的功能是創建視圖特有的菜單欄和工具欄的,結合上一小節的內容,我們應該很快就可以探索到怎么給視圖添加漂亮的工具欄了,這里我不再羅嗦。

          再來看Perspective.java,不難發現,所有的透視圖類都需要實現IPerspectiveFactory接口,而該接口的createInitialLayout方法,就是描述工作臺窗口中編輯器和視圖的布局。默認情況下,透視圖中只包含一個編輯器區域,就是我們第一節中看到的那個效果。在createInitialLayou中,我們可以通過以下幾個方法向透視圖中添加視圖、編輯器和菜單:
          addView?? —— 添加視圖
          addActionSet —— 添加菜單和工具欄
          createFolder —— 創建一個IForderLayou,可以讓多個視圖重疊在同一個位置

          寫到這里,肯定有人會問,如果我要創建一個象Eclipse中的資源視圖這樣的視圖,該怎么做呢?這我們就要感謝org.eclipse.jface.viewers包了,Viewer,這里翻譯為查看器,它和視圖是不一樣的。JFace查看器是Jface對SWT部件的封裝,它簡化了我們對小部件的操作。在使用查看器的時候,它的數據使用單獨的模型對象來保存,使用查看器的setInput方法可以為查看器設置模型,此外,在使用查看器的時候,需要為它提供ContentProvider(內容提供器)和LabelProvider(標簽提供器)。

          JFace查看器主要分為以下幾類:
          1. ListViewer: 對應于SWT的列表控件,目的是將列表中的元素映射至SWT列表控件
          2. TreeViewer: 對應于SWT的樹控件,提供樹的展開和折疊等基本操作
          3. TableViewer: 對應于SWT的表控件,映射表中的元素
          4. TextViewer: 對應于SWT的StyledText控件,創建編輯器的時候,使用這個查看器是最合適不過了。

          好了,介紹性的文字就寫到這里,我想大家一定已經知道了探索的方向。下面,我們看一個簡單的示例,就是這篇文章開頭給出的效果圖。它是我模仿醫院管理系統做的一個簡單例子,左邊的視圖就是使用了一個ListView查看器。這里給出它的關鍵代碼:
          ?1public?void?createPartControl(Composite?parent)?{
          ?2????????
          ?3
          ?4????????viewer?=?new?ListViewer(parent,?SWT.BORDER);
          ?5????????viewer.setContentProvider(new?PersonContentProvider());
          ?6????????viewer.setLabelProvider(new?PersonLabelProvider());
          ?7????????viewer.setInput(new?PersonModel());
          ?8????????
          ?9????????createActions();
          10????????initializeToolBar();
          11????????initializeMenu();
          12????}

          可以看到,這里需要設置內容提供器和標簽提供器和模型。下面,我們先創建一個病人類Person.java:
          ?1package?cn.blogjava.youxia.views;
          ?2
          ?3public?class?Person?{
          ?4????
          ?5????private?String?name;
          ?6????private?String?sex;
          ?7????public?String?getName()?{
          ?8????????return?name;
          ?9????}

          10????public?void?setName(String?name)?{
          11????????this.name?=?name;
          12????}

          13????public?String?getSex()?{
          14????????return?sex;
          15????}

          16????public?void?setSex(String?sex)?{
          17????????this.sex?=?sex;
          18????}

          19
          20}

          下面,創建模型類PersonModel.java,在構造函數中我們向List中填入了幾個初始化數據:
          ?1package?cn.blogjava.youxia.views;
          ?2import?java.util.ArrayList;
          ?3
          ?4public?class?PersonModel?{
          ?5????
          ?6????private?ArrayList<Person>?list?=?new?ArrayList<Person>();
          ?7????
          ?8????public?interface?Listener{
          ?9????????public?void?add(Person?p);
          10????????public?void?remove(Person?p);
          11????}

          12????
          13????private?Listener?listener;
          14????
          15????public?PersonModel(){
          16????????//向list里面填入幾個初始化數據
          17????????Person?p1?=?new?Person();
          18????????p1.setName("病人1");
          19????????p1.setSex("");
          20????????list.add(p1);
          21????????
          22????????Person?p2?=?new?Person();
          23????????p2.setName("病人2");
          24????????p2.setSex("");
          25????????list.add(p2);
          26????????
          27????}

          28
          29????public?void?setListener(Listener?listener){
          30????????this.listener?=?listener;
          31????}

          32????
          33????public?void?add(Person?p){
          34????????list.add(p);
          35????????if(listener?!=?null){
          36????????????listener.add(p);
          37????????}

          38????}

          39????
          40????public?void?remove(Person?p){
          41????????list.remove(p);
          42????????if(listener?!=?null){
          43????????????listener.remove(p);
          44????????}

          45????}

          46????
          47????public?ArrayList?elements(){
          48????????return?list;
          49????}

          50}

          在這里,我們還定義了一個Listener接口,為什么要有這么一個接口呢?就是為了讓我們模型中的數據被改變時,查看器能夠相應更改。下面,我們實現內容提供器,該內容提供器實現了PersonModel中定義的Listener接口,如下PersonContentProvider.java:
          ?1package?cn.blogjava.youxia.views;
          ?2
          ?3import?org.eclipse.jface.viewers.IStructuredContentProvider;
          ?4import?org.eclipse.jface.viewers.Viewer;
          ?5import?org.eclipse.jface.viewers.ListViewer;
          ?6
          ?7import?cn.blogjava.youxia.views.PersonModel.Listener;
          ?8
          ?9public?class?PersonContentProvider?implements?IStructuredContentProvider,
          10????????Listener?{
          11
          12????PersonModel?input;
          13????ListViewer?viewer;
          14????
          15????public?Object[]?getElements(Object?inputElement)?{
          16????????//?TODO?自動生成方法存根
          17????????return?input.elements().toArray();
          18????}

          19
          20????public?void?dispose()?{
          21????????//?TODO?自動生成方法存根
          22????????if(input?!=?null){
          23????????????input.setListener(null);
          24????????}

          25????????input?=?null;
          26
          27????}

          28
          29????public?void?inputChanged(Viewer?viewer,?Object?oldInput,?Object?newInput)?{
          30????????//?TODO?自動生成方法存根
          31????????viewer?=?(ListViewer)viewer;
          32????????input?=?(PersonModel)newInput;
          33????????input.setListener(this);
          34
          35????}

          36
          37????public?void?add(Person?p)?{
          38????????//?TODO?自動生成方法存根
          39????????viewer.add(p);
          40????}

          41
          42????public?void?remove(Person?p)?{
          43????????//?TODO?自動生成方法存根
          44????????viewer.remove(p);
          45????}

          46
          47}

          我們知道,列表中的元素都是Person類的對象,怎么讓他們顯示出來呢,需要實現標簽提供器,在標簽提供器中,我們可以設置對象顯示的圖標和文字,如下PersonLabelProvider.java:
          ?1package?cn.blogjava.youxia.views;
          ?2
          ?3import?org.eclipse.jface.viewers.ILabelProvider;
          ?4import?org.eclipse.jface.viewers.ILabelProviderListener;
          ?5import?org.eclipse.swt.graphics.Image;
          ?6
          ?7public?class?PersonLabelProvider?implements?ILabelProvider?{
          ?8
          ?9????public?Image?getImage(Object?element)?{
          10????????return?null;
          11????}

          12
          13????public?String?getText(Object?element)?{
          14????????//?TODO?自動生成方法存根
          15????????return?((Person)element).getName();
          16????}

          17
          18????public?void?addListener(ILabelProviderListener?listener)?{
          19????????//?TODO?自動生成方法存根
          20
          21????}

          22
          23????public?void?dispose()?{
          24????????//?TODO?自動生成方法存根
          25
          26????}

          27
          28????public?boolean?isLabelProperty(Object?element,?String?property)?{
          29????????//?TODO?自動生成方法存根
          30????????return?false;
          31????}

          32
          33????public?void?removeListener(ILabelProviderListener?listener)?{
          34????????//?TODO?自動生成方法存根
          35
          36????}

          37
          38}

          運行程序,就得到了文章開頭的效果,但是不能在右邊的視圖中顯示病人的詳細信息。

          如果要做到視圖的交互,需要添加事件的監聽器。使用Java 進行GUI開發的人應該都不會陌生,而我在RCP上,也處于探索階段,更深一步的內容,讓我們自己慢慢研究吧。

          評論

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖  回復  更多評論   

          2006-11-27 11:33 by leon
          看了你關于使用Eclipse RCP進行桌面程序開發文章覺得很有幫助,我目前的工作主要是使用Java進行桌面應用程序的開發,公司原有的產品是基于Swing的,明年會有一個全面升級,正在考慮使用RCP的插件模式進行開發。由于以前從沒接觸過RCP開發方面知識,還在猶豫是程序選擇搭建在NetBeans平臺還是Eclipse平臺上,你能給我一些建議嗎?
          我對Swing很熟悉,我們的軟件用于對圖形圖像進行處理,對Java2D的使用比較多。

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖  回復  更多評論   

          2006-11-27 14:46 by 海邊沫沫
          強烈推薦Eclipse Rcp
          不僅界面美觀,而且運行速度也要快得多
          org.eclipse.swt和org.eclipse.jface對2D提供近乎完美的支持,由于Swing的窗口都是仿生的,所以一是運行效率差,二是界面不美觀,三是Swing程序在讀取Windows事件時存在嚴重的缺陷。在這種情況下,IBM公司的開發者們在開發Eclipse時,完全摒棄了AWT和Swing,從底層的Point類和Rectangle類出發,開發了一整套自己的圖形類庫,就是SWT。
          jface和Rcp只不過是更高層次的封裝而已。

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖  回復  更多評論   

          2006-11-30 15:46 by newer
          有沒有,免費的,可視化的開發插件呢。。類似delphi或vb,實現可視開發

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖  回復  更多評論   

          2006-12-01 14:45 by 海邊沫沫
          當然有啊
          Designer插件

          VE插件

          VE是完全免費的。

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖  回復  更多評論   

          2006-12-06 11:08 by 簡單愛
          哪里可以下載Designer插件?

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖  回復  更多評論   

          2006-12-06 21:56 by 京山游俠
          http://www.instantiations.com/
          可以下載Designer插件

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖  回復  更多評論   

          2006-12-07 10:40 by newer
          謝謝。VE是完全免費的,這么說designer是商業的嗎,哪個好呢。

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖  回復  更多評論   

          2006-12-07 12:35 by 京山游俠
          哪個更好我說不準,最好你們都試用一下吧
          Designer也有免費的,功能比收費的稍微少一點

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖  回復  更多評論   

          2006-12-08 10:04 by newer
          謝謝,謝謝你的開源文檔。。呵呵,你的心得是我少走很多彎路。另外,還有個問題請教:JAVA的強項是做企業開發,現在的RCP能其展現豐富的延伸到桌面,但方便連接和展示數據庫的swt 和jface控件似乎沒有,沒有類似datagrid的數據感知控件,是吧,您有什么好建議呢。。再次感謝。

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖  回復  更多評論   

          2006-12-08 21:06 by 京山游俠
          Java世界的特點,就是開源的東西特別多。你說的數據感知控件不一定沒有,只不過我們不知道而已。
          如果真的沒有,自己開發應該也不算難。

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖  回復  更多評論   

          2006-12-09 14:26 by wing5jface
          jfacebind提供類似數據綁定的功能,datagrid:用tableviwer+jfacebind很容易實易,至于dbtext,dbcombo現階段則需要自已定制的了.

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖  回復  更多評論   

          2006-12-12 00:32 by jjs
          請問以下代碼在哪個類中

          1public void createPartControl(Composite parent) {
          2
          3
          4 viewer = new ListViewer(parent, SWT.BORDER);
          5 viewer.setContentProvider(new PersonContentProvider());
          6 viewer.setLabelProvider(new PersonLabelProvider());
          7 viewer.setInput(new PersonModel());
          8
          9 createActions();
          10 initializeToolBar();
          11 initializeMenu();
          12 }

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖  回復  更多評論   

          2006-12-12 12:37 by 海邊沫沫
          在視圖類中。這里左邊的視圖我取的視圖名為SecondView

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖  回復  更多評論   

          2006-12-24 16:59 by BeanSoft
          @leon
          對你們這種情況, 偶覺得還是整合 Netbeans Platform 比較好, 從 Swing 項目遷到 SWT 項目, 風險很大, 尤其是如果項目很大很大的話. 兩者之間的對象模型啊, 事件處理啊, 組件啊什么的兼容性簡直就是沒有. 當然如果是算法集中的, 那遷移一下應該比較容易. 如果需要托盤啊, 內置 IE 瀏覽器啊什么的, 可以考慮 JDIC 項目. 參考偶的Tomcat Monitor: http://www.aygfsteel.com/beansoft/archive/2006/12/18/88465.aspx.

          如果項目不復雜的話, 可以考慮 SwingWT(http://swingwt.sourceforge.net/) 這個項目, 直接用 Swing 的 API 寫 SWT.

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖  回復  更多評論   

          2007-01-16 13:45 by alan
          你好,我叫ALAN,我正在想用RCP設計一個軟件,我也用了SWT Designer v6.0(破解了的), 可是怎么打開Application.java和ApplicationWorkbenchWindowAdvisor用SWT Designer看不到里面的控件???但是可以編輯Action控件,我新建一個SWT Application也可以用SWT Designer來編輯,請問如果要用SWT Designer來編輯RCP程序,應該怎么做?謝謝!另外說一聲,你的RCP入門對我很有幫助,謝謝!

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖  回復  更多評論   

          2007-01-16 13:59 by BeanSoft
          好像 SWT Designer, Visual Editor 之類的工具只能設計 SWT 應用, 不能可視化設計 RCP. 因為 RCP 是基于 SWT 的框架, 不是純粹的 SWT. 就像 Eclipse 本身不是用 SWT Designer 設計出來的一樣.

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖  回復  更多評論   

          2007-07-30 16:33 by 小白之家
          RCP入門對我很有幫助,謝謝!

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖[未登錄]  回復  更多評論   

          2007-09-19 15:06 by steve
          你好,我要在程序界面上顯示console,請問該怎么做啊,我對RCP不熟悉,從網上查的資料不行,謝謝??!

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖  回復  更多評論   

          2007-11-12 13:56 by metaphy
          你好,我要在程序界面上顯示console,請問該怎么做啊,我對RCP不熟悉,從網上查的資料不行,謝謝??!
          ============================
          console只是個textbox,我覺得你意思是把System.out.print()打印的東西自動打到里面?
          這個似乎沒法自動實現吧

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖[未登錄]  回復  更多評論   

          2008-03-07 23:12 by liu
          請問tableviewer中怎么顯示數據集resultset?

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖  回復  更多評論   

          2008-03-12 16:35 by badboy.
          把System.out里的東西輸出來看看

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖  回復  更多評論   

          2008-03-13 10:38 by badboy.
          請問plugin_customization.ini放到哪個路徑下?
          我放到根目錄下沒有效果,又刪除不了,說與文件系統不同步。。。。。

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖  回復  更多評論   

          2008-03-29 23:47 by banditgao
          是啊 博主說說plugin_customization.ini是放哪的啊?我放到根目錄也沒用

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖[未登錄]  回復  更多評論   

          2008-03-30 17:41 by 哈哈
          SWT Designer全版本注冊文件生成器

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖  回復  更多評論   

          2008-03-30 18:55 by banditgao
          那段代碼應該是這樣的,我把第二個視圖起名叫SecondView.java,還必須引入ListViewer,代碼如下:

          import org.eclipse.jface.viewers.ListViewer;

          public void createPartControl(Composite parent)
          {
          ListViewer viewer = new ListViewer(parent, SWT.BORDER);
          viewer.setContentProvider(new PersonContentProvider());
          viewer.setLabelProvider(new PersonLabelProvider());
          viewer.setInput(new PersonModel());

          createActions();
          initializeToolBar();
          initializeMenu();

          }

          還得在plugin.xml 中添加

          <extension
          point="org.eclipse.ui.views">

          <view
          class="cn.blogjava.youxia.views.SecondView"
          id="cn.blogjava.youxia.views.SecondView"
          name="第二個View"
          />
          </extension>

          還要在Perspective.java中添加

          layout.setEditorAreaVisible(false);
          layout.addView("cn.blogjava.youxia.views.SecondView", IPageLayout.RIGHT, 0.5f, editorArea);

          這樣的話出來的結果就跟文中完全一致了,呵呵!

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖  回復  更多評論   

          2008-04-02 15:59 by wn
          FirstView和SecondView視圖的交互,需要添加事件的監聽器.是怎么樣實現?分別加入什么代碼呀。

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖  回復  更多評論   

          2008-05-17 18:27 by banditgao
          研究兩個視圖的交互,搞了個把星期了也沒完全搞定

          視圖交互是關鍵問題??!這個搞不懂沒法繼續了,也沒法自己做個小東西練習呀

          老大,教教我們RCP視圖交互是如何實現的啊 謝謝

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖  回復  更多評論   

          2008-12-16 14:26 by 雙擊打開角度看
          menuManager ,toolbarManager 的實現介紹一下

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖  回復  更多評論   

          2009-01-21 10:29 by 初學java
          看著上面代碼頭都暈了!

          樓主的RCP入門教程講的非常好,給大家很多幫助!

          但是,我看完這些東西,在考慮:java下的富客戶端開發與delphi、C#等相比,有何優勢?跨平臺,delphi下也能做到!
          看完RCP介紹,感覺要花費好多的精力在界面設計上,如果Eclipse RCP能像delphi或C#一樣,采用拖拉方式、屬性編輯框來完成整個界面設計工作,程序員只要關注業務實現部分即可,那該有多爽??!

          確實如樓主所言,我看到一些國外項目基于RCP的應用比較多!

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖  回復  更多評論   

          2009-04-02 14:11 by 王廣
          樓主可以講一下怎么在Action中寫個方法,打開自己擴展的關閉了的視圖嗎
          還要什么配置嗎,能給個列子嗎,多謝

          發我qq郵箱吧 542652620@qq.com

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖  回復  更多評論   

          2009-04-17 10:00 by 創意產品網
          不錯。

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖  回復  更多評論   

          2009-12-07 10:56 by lin
          寫得很詳細,太感謝了。

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖  回復  更多評論   

          2010-11-26 22:57 by qpyong
          太感謝樓主了!
          最近正在學rcp

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖[未登錄]  回復  更多評論   

          2012-02-10 09:52 by 小周
          @海邊沫沫
          樓主,有問題請教。
          public class Perspective implements IPerspectiveFactory
          {

          public void createInitialLayout(IPageLayout layout)
          {
          String editorArea = layout.getEditorArea();
          layout.setEditorAreaVisible(false);

          layout.addStandaloneView(ViewPartId.PIS_NAVIGATION, true,
          IPageLayout.LEFT, 0.25f, editorArea);
          layout.getViewLayout(ViewPartId.PIS_NAVIGATION).setCloseable(false);

          {
          // 戶信息管理view界面
          layout.addPlaceholder(ViewPartId.INFO_HOUSEHOLDS, IPageLayout.TOP,
          0.5f, editorArea);
          layout.addPlaceholder(ViewPartId.INFO_CASE, IPageLayout.TOP, 0.5f,
          editorArea);
          IFolderLayout folderLayout = layout.createFolder("folder",
          IPageLayout.BOTTOM, 0.0f, editorArea);
          folderLayout.addPlaceholder(ViewPartId.INFO_CREDIT);
          folderLayout.addPlaceholder(ViewPartId.INFO_ENCOURAGEMENT);
          folderLayout.addPlaceholder(ViewPartId.INFO_CHARGE);
          }
          {
          // 育齡婦女信息管理view界面
          layout.addPlaceholder(ViewPartId.INFO_BBAGEWOMENINFO, IPageLayout.TOP,
          0.6f, editorArea);
          IFolderLayout folderLayout0 = layout.createFolder("folder",
          IPageLayout.TOP, 0.4f, editorArea);
          folderLayout0.addPlaceholder(ViewPartId.INFO_GESTATION);
          folderLayout0.addPlaceholder(ViewPartId.INFO_FAMILY);
          folderLayout0.addPlaceholder(ViewPartId.INFO_MARRIAGE);
          folderLayout0.addPlaceholder(ViewPartId.INFO_CONTRACEPTION);
          }
          }
          }
          共十個View,希望得到第一個上1中1下3和上1下四的兩種布局,第一個可以正常顯示,但是第二個不能正常顯示,修改參數也不成功。希望樓主給以指導。QQ:836233095,謝謝

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖  回復  更多評論   

          2012-04-21 13:58 by 戀你如昔2012
          感謝

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖[未登錄]  回復  更多評論   

          2012-10-16 14:04 by tony
          為什么我的運行之后view不顯示....

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖[未登錄]  回復  更多評論   

          2012-10-17 07:45 by tony
          public class Perspective implements IPerspectiveFactory {

          public void createInitialLayout(IPageLayout layout) {

          System.out.println( " ----------------" );
          layout.setEditorAreaVisible(false);
          layout.setFixed(true);

          String editorArea = layout.getEditorArea();
          layout.addView(ViewOne.ID, IPageLayout.RIGHT, 0.2f, editorArea);
          }
          }
          此段代碼根本不執行...125909696

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖  回復  更多評論   

          2013-03-25 23:21 by orangey
          @tony
          擴展 org.eclipse.ui.perspectiveExtensions, 然后把view 添加進去

          <extension
          point="org.eclipse.ui.views">
          <view
          class="rcp_02.view.FirstView"
          id="cn.blogjava.youxia.views.FirstView"
          name="name"
          restorable="true">
          </view>
          </extension>
          <extension
          point="org.eclipse.ui.perspectiveExtensions">
          <perspectiveExtension
          targetID="*">
          <view
          id="cn.blogjava.youxia.views.FirstView"
          minimized="false"
          relationship="stack"
          relative="org.eclipse.ui.editorss"
          >
          </view>
          </perspectiveExtension>

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖  回復  更多評論   

          2014-03-18 16:53 by None
          @tony

          關于Perspective.createInitialLayout的問題:

          The IWorkbenchConfigurer.setSaveAndRestore(true) called from your WorkbenchAdvisor can be the source of the problem.

          具體見:http://rubenlaguna.com/wp/2007/04/23/new-views-dont-show-up-when-using-eclipse-rcp-setsaveandrestore/

          # re: 使用Eclipse RCP進行桌面程序開發(三):視圖和透視圖  回復  更多評論   

          2014-03-18 16:54 by None
          @tony

          關于IPerspectiveFactory.createInitialLayout不執行的問題:

          The IWorkbenchConfigurer.setSaveAndRestore(true) called from your WorkbenchAdvisor can be the source of the problem.

          具體見:http://rubenlaguna.com/wp/2007/04/23/new-views-dont-show-up-when-using-eclipse-rcp-setsaveandrestore/
          主站蜘蛛池模板: 巴南区| 沅陵县| 沈阳市| 鸡泽县| 万州区| 越西县| 长子县| 盐池县| 乐清市| 铜山县| 定襄县| 冀州市| 延安市| 鹤壁市| 沂源县| 屯门区| 钦州市| 大连市| 阿合奇县| 湄潭县| 阳曲县| 德昌县| 滦南县| 长汀县| 九龙县| 台中县| 东至县| 涟源市| 琼海市| 洛川县| 文安县| 准格尔旗| 虹口区| 新化县| 电白县| 清远市| 新蔡县| 洪江市| 晋江市| 化德县| 美姑县|