<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    京山游俠

    專注技術,拒絕扯淡
    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://m.tkk7.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/
    主站蜘蛛池模板: 精品女同一区二区三区免费站| 草久免费在线观看网站| 精品一区二区三区无码免费视频| 亚洲日本va中文字幕久久| a毛片在线还看免费网站| 亚洲αv久久久噜噜噜噜噜| 久久精品免费观看| 久久亚洲AV成人无码| 16女性下面无遮挡免费| 亚洲人成高清在线播放| 成人免费无遮挡无码黄漫视频| 亚洲欧洲AV无码专区| 免费中文字幕在线观看| 国产午夜无码片免费| 亚洲va在线va天堂va四虎| 亚洲AV无码久久精品成人| 未满十八18禁止免费无码网站| 亚洲视频一区在线观看| 最近免费中文字幕4| 黄网站色成年片大免费高清 | 十八禁无码免费网站| 亚洲电影在线免费观看| 免费看大黄高清网站视频在线| 免费VA在线观看无码| 亚洲AV无码一区二区二三区入口| 曰曰鲁夜夜免费播放视频| 亚洲av无码成人精品国产| 中文字幕亚洲一区二区三区| 久99久精品免费视频热77| 亚洲最大天堂无码精品区| 亚洲国产成人VA在线观看| 91在线亚洲综合在线| 亚洲国产综合久久天堂| 一区二区免费视频| 日韩欧美亚洲中文乱码| 久久精品国产亚洲av麻| 女人18毛片水真多免费播放| 亚洲五月午夜免费在线视频| 亚洲无线电影官网| 亚洲成a人一区二区三区| 最近中文字幕mv免费高清视频8 |