京山游俠

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

          Eclipse RCP開(kāi)發(fā)中,和用戶進(jìn)行交互最多的界面,應(yīng)該是視圖了,而透視圖就是將已有的視圖、菜單、工具欄、編輯器等等進(jìn)行組合和布局。看完這一節(jié),我們就可以建立如下圖這樣的程序界面了。

          rcp25.JPG

          首先我們來(lái)介紹一下視圖,建立一個(gè)視圖其實(shí)非常簡(jiǎn)單,只要從org.eclipse.ui.part.ViewPart繼承一個(gè)類(lèi),然后在plugin.xml中進(jìn)行視圖的配置。其中,向視圖中添加控件的操作,我們即可以手工編寫(xiě),也可以使用Designer插件,我這里推薦大家使用Designer插件,該插件對(duì)RCP提供功能非常強(qiáng)大的支持,如果使用Designer插件開(kāi)發(fā)視圖,則plugin.xml文件也不需要我們手動(dòng)修改了。

          比如我們上圖中的第一個(gè)視圖,就是從ViewPart繼承一個(gè)類(lèi),然后在上面加入了幾個(gè)swt的控件,做得非常得簡(jiǎn)單,而它的配置文件如下:
          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="第一個(gè)View"/>
          7</extension>

          可以看到,實(shí)現(xiàn)這個(gè)視圖的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插件自動(dòng)生成。這個(gè)時(shí)候,如果我們運(yùn)行程序的話,我們的視圖還不會(huì)被顯示出來(lái)。為了讓我們的視圖可以顯示,我們還需要修改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}

          運(yùn)行程序,得到如下效果:

          rcp23.JPG

          我們可以發(fā)現(xiàn),上面這個(gè)視圖的標(biāo)簽不是我們通常看到的波浪形,我們可以通過(guò)配置文件的方式來(lái)更改產(chǎn)品的樣式。
          首先,在plugin.xml中對(duì)org.eclipse.core.runtime.products擴(kuò)展點(diǎn)的屬性進(jìn)行更改,如下:

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

          可見(jiàn),我們?yōu)槲覀兊漠a(chǎn)品添加了一個(gè)prefereneCustomization屬性,該屬性的值為plugin_customization.ini文件,在該文件中,我們可以配置我們的樣式。在這里,它的內(nèi)容如下:
          1org.eclipse.ui/SHOW_TRADITIONAL_STYLE_TABS=false
          2org.eclipse.ui/DOCK_PERSPECTIVE_BAR=topRight

          事實(shí)上,在這個(gè)文件中可以定義的參數(shù)有上百個(gè),大家可以查看Eclipse的文檔。
          這個(gè)時(shí)候,效果應(yīng)該是這樣的了:
          rcp24.JPG

          好了,我們現(xiàn)在對(duì)以上的代碼做一個(gè)總結(jié)。我不是寫(xiě)教科書(shū),在Blog中也沒(méi)有寫(xiě)得那么詳細(xì)的條件。我們這里主要關(guān)注在哪個(gè)地方對(duì)代碼進(jìn)行擴(kuò)展,可以達(dá)到我們想要的效果。比如,我們要?jiǎng)?chuàng)建視圖,就是需要擴(kuò)展org.eclipse.ui.part.ViewPart類(lèi),然后向其中添加控件,再然后配置plugin.xml文件,最后修改透視圖的代碼,以便它能夠顯示出來(lái)。

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

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

          寫(xiě)到這里,肯定有人會(huì)問(wèn),如果我要?jiǎng)?chuàng)建一個(gè)象Eclipse中的資源視圖這樣的視圖,該怎么做呢?這我們就要感謝org.eclipse.jface.viewers包了,Viewer,這里翻譯為查看器,它和視圖是不一樣的。JFace查看器是Jface對(duì)SWT部件的封裝,它簡(jiǎn)化了我們對(duì)小部件的操作。在使用查看器的時(shí)候,它的數(shù)據(jù)使用單獨(dú)的模型對(duì)象來(lái)保存,使用查看器的setInput方法可以為查看器設(shè)置模型,此外,在使用查看器的時(shí)候,需要為它提供ContentProvider(內(nèi)容提供器)和LabelProvider(標(biāo)簽提供器)。

          JFace查看器主要分為以下幾類(lèi):
          1. ListViewer: 對(duì)應(yīng)于SWT的列表控件,目的是將列表中的元素映射至SWT列表控件
          2. TreeViewer: 對(duì)應(yīng)于SWT的樹(shù)控件,提供樹(shù)的展開(kāi)和折疊等基本操作
          3. TableViewer: 對(duì)應(yīng)于SWT的表控件,映射表中的元素
          4. TextViewer: 對(duì)應(yīng)于SWT的StyledText控件,創(chuàng)建編輯器的時(shí)候,使用這個(gè)查看器是最合適不過(guò)了。

          好了,介紹性的文字就寫(xiě)到這里,我想大家一定已經(jīng)知道了探索的方向。下面,我們看一個(gè)簡(jiǎn)單的示例,就是這篇文章開(kāi)頭給出的效果圖。它是我模仿醫(yī)院管理系統(tǒng)做的一個(gè)簡(jiǎn)單例子,左邊的視圖就是使用了一個(gè)ListView查看器。這里給出它的關(guān)鍵代碼:
          ?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????}

          可以看到,這里需要設(shè)置內(nèi)容提供器和標(biāo)簽提供器和模型。下面,我們先創(chuàng)建一個(gè)病人類(lèi)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}

          下面,創(chuàng)建模型類(lèi)PersonModel.java,在構(gòu)造函數(shù)中我們向List中填入了幾個(gè)初始化數(shù)據(jù):
          ?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里面填入幾個(gè)初始化數(shù)據(jù)
          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}

          在這里,我們還定義了一個(gè)Listener接口,為什么要有這么一個(gè)接口呢?就是為了讓我們模型中的數(shù)據(jù)被改變時(shí),查看器能夠相應(yīng)更改。下面,我們實(shí)現(xiàn)內(nèi)容提供器,該內(nèi)容提供器實(shí)現(xiàn)了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?自動(dòng)生成方法存根
          17????????return?input.elements().toArray();
          18????}

          19
          20????public?void?dispose()?{
          21????????//?TODO?自動(dòng)生成方法存根
          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?自動(dòng)生成方法存根
          31????????viewer?=?(ListViewer)viewer;
          32????????input?=?(PersonModel)newInput;
          33????????input.setListener(this);
          34
          35????}

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

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

          46
          47}

          我們知道,列表中的元素都是Person類(lèi)的對(duì)象,怎么讓他們顯示出來(lái)呢,需要實(shí)現(xiàn)標(biāo)簽提供器,在標(biāo)簽提供器中,我們可以設(shè)置對(duì)象顯示的圖標(biāo)和文字,如下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?自動(dòng)生成方法存根
          15????????return?((Person)element).getName();
          16????}

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

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

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

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

          37
          38}

          運(yùn)行程序,就得到了文章開(kāi)頭的效果,但是不能在右邊的視圖中顯示病人的詳細(xì)信息。

          如果要做到視圖的交互,需要添加事件的監(jiān)聽(tīng)器。使用Java 進(jìn)行GUI開(kāi)發(fā)的人應(yīng)該都不會(huì)陌生,而我在RCP上,也處于探索階段,更深一步的內(nèi)容,讓我們自己慢慢研究吧。

          評(píng)論

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖  回復(fù)  更多評(píng)論   

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

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖  回復(fù)  更多評(píng)論   

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

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖  回復(fù)  更多評(píng)論   

          2006-11-30 15:46 by newer
          有沒(méi)有,免費(fèi)的,可視化的開(kāi)發(fā)插件呢。。類(lèi)似delphi或vb,實(shí)現(xiàn)可視開(kāi)發(fā)

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖  回復(fù)  更多評(píng)論   

          2006-12-01 14:45 by 海邊沫沫
          當(dāng)然有啊
          Designer插件

          VE插件

          VE是完全免費(fèi)的。

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖  回復(fù)  更多評(píng)論   

          2006-12-06 11:08 by 簡(jiǎn)單愛(ài)
          哪里可以下載Designer插件?

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖  回復(fù)  更多評(píng)論   

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

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖  回復(fù)  更多評(píng)論   

          2006-12-07 10:40 by newer
          謝謝。VE是完全免費(fèi)的,這么說(shuō)designer是商業(yè)的嗎,哪個(gè)好呢。

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖  回復(fù)  更多評(píng)論   

          2006-12-07 12:35 by 京山游俠
          哪個(gè)更好我說(shuō)不準(zhǔn),最好你們都試用一下吧
          Designer也有免費(fèi)的,功能比收費(fèi)的稍微少一點(diǎn)

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖  回復(fù)  更多評(píng)論   

          2006-12-08 10:04 by newer
          謝謝,謝謝你的開(kāi)源文檔。。呵呵,你的心得是我少走很多彎路。另外,還有個(gè)問(wèn)題請(qǐng)教:JAVA的強(qiáng)項(xiàng)是做企業(yè)開(kāi)發(fā),現(xiàn)在的RCP能其展現(xiàn)豐富的延伸到桌面,但方便連接和展示數(shù)據(jù)庫(kù)的swt 和jface控件似乎沒(méi)有,沒(méi)有類(lèi)似datagrid的數(shù)據(jù)感知控件,是吧,您有什么好建議呢。。再次感謝。

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖  回復(fù)  更多評(píng)論   

          2006-12-08 21:06 by 京山游俠
          Java世界的特點(diǎn),就是開(kāi)源的東西特別多。你說(shuō)的數(shù)據(jù)感知控件不一定沒(méi)有,只不過(guò)我們不知道而已。
          如果真的沒(méi)有,自己開(kāi)發(fā)應(yīng)該也不算難。

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖  回復(fù)  更多評(píng)論   

          2006-12-09 14:26 by wing5jface
          jfacebind提供類(lèi)似數(shù)據(jù)綁定的功能,datagrid:用tableviwer+jfacebind很容易實(shí)易,至于dbtext,dbcombo現(xiàn)階段則需要自已定制的了.

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖  回復(fù)  更多評(píng)論   

          2006-12-12 00:32 by jjs
          請(qǐng)問(wèn)以下代碼在哪個(gè)類(lèi)中

          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進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖  回復(fù)  更多評(píng)論   

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

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖  回復(fù)  更多評(píng)論   

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

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

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖  回復(fù)  更多評(píng)論   

          2007-01-16 13:45 by alan
          你好,我叫ALAN,我正在想用RCP設(shè)計(jì)一個(gè)軟件,我也用了SWT Designer v6.0(破解了的), 可是怎么打開(kāi)Application.java和ApplicationWorkbenchWindowAdvisor用SWT Designer看不到里面的控件啊?但是可以編輯Action控件,我新建一個(gè)SWT Application也可以用SWT Designer來(lái)編輯,請(qǐng)問(wèn)如果要用SWT Designer來(lái)編輯RCP程序,應(yīng)該怎么做?謝謝!另外說(shuō)一聲,你的RCP入門(mén)對(duì)我很有幫助,謝謝!

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖  回復(fù)  更多評(píng)論   

          2007-01-16 13:59 by BeanSoft
          好像 SWT Designer, Visual Editor 之類(lèi)的工具只能設(shè)計(jì) SWT 應(yīng)用, 不能可視化設(shè)計(jì) RCP. 因?yàn)?RCP 是基于 SWT 的框架, 不是純粹的 SWT. 就像 Eclipse 本身不是用 SWT Designer 設(shè)計(jì)出來(lái)的一樣.

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖  回復(fù)  更多評(píng)論   

          2007-07-30 16:33 by 小白之家
          RCP入門(mén)對(duì)我很有幫助,謝謝!

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖[未登錄](méi)  回復(fù)  更多評(píng)論   

          2007-09-19 15:06 by steve
          你好,我要在程序界面上顯示console,請(qǐng)問(wèn)該怎么做啊,我對(duì)RCP不熟悉,從網(wǎng)上查的資料不行,謝謝啊!

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖  回復(fù)  更多評(píng)論   

          2007-11-12 13:56 by metaphy
          你好,我要在程序界面上顯示console,請(qǐng)問(wèn)該怎么做啊,我對(duì)RCP不熟悉,從網(wǎng)上查的資料不行,謝謝啊!
          ============================
          console只是個(gè)textbox,我覺(jué)得你意思是把System.out.print()打印的東西自動(dòng)打到里面?
          這個(gè)似乎沒(méi)法自動(dòng)實(shí)現(xiàn)吧

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖[未登錄](méi)  回復(fù)  更多評(píng)論   

          2008-03-07 23:12 by liu
          請(qǐng)問(wèn)tableviewer中怎么顯示數(shù)據(jù)集resultset?

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖  回復(fù)  更多評(píng)論   

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

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖  回復(fù)  更多評(píng)論   

          2008-03-13 10:38 by badboy.
          請(qǐng)問(wèn)plugin_customization.ini放到哪個(gè)路徑下?
          我放到根目錄下沒(méi)有效果,又刪除不了,說(shuō)與文件系統(tǒng)不同步。。。。。

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖  回復(fù)  更多評(píng)論   

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

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖[未登錄](méi)  回復(fù)  更多評(píng)論   

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

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖  回復(fù)  更多評(píng)論   

          2008-03-30 18:55 by banditgao
          那段代碼應(yīng)該是這樣的,我把第二個(gè)視圖起名叫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="第二個(gè)View"
          />
          </extension>

          還要在Perspective.java中添加

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

          這樣的話出來(lái)的結(jié)果就跟文中完全一致了,呵呵!

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖  回復(fù)  更多評(píng)論   

          2008-04-02 15:59 by wn
          FirstView和SecondView視圖的交互,需要添加事件的監(jiān)聽(tīng)器.是怎么樣實(shí)現(xiàn)?分別加入什么代碼呀。

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖  回復(fù)  更多評(píng)論   

          2008-05-17 18:27 by banditgao
          研究?jī)蓚€(gè)視圖的交互,搞了個(gè)把星期了也沒(méi)完全搞定

          視圖交互是關(guān)鍵問(wèn)題啊!這個(gè)搞不懂沒(méi)法繼續(xù)了,也沒(méi)法自己做個(gè)小東西練習(xí)呀

          老大,教教我們RCP視圖交互是如何實(shí)現(xiàn)的啊 謝謝

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖  回復(fù)  更多評(píng)論   

          2008-12-16 14:26 by 雙擊打開(kāi)角度看
          menuManager ,toolbarManager 的實(shí)現(xiàn)介紹一下

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖  回復(fù)  更多評(píng)論   

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

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

          但是,我看完這些東西,在考慮:java下的富客戶端開(kāi)發(fā)與delphi、C#等相比,有何優(yōu)勢(shì)?跨平臺(tái),delphi下也能做到!
          看完RCP介紹,感覺(jué)要花費(fèi)好多的精力在界面設(shè)計(jì)上,如果Eclipse RCP能像delphi或C#一樣,采用拖拉方式、屬性編輯框來(lái)完成整個(gè)界面設(shè)計(jì)工作,程序員只要關(guān)注業(yè)務(wù)實(shí)現(xiàn)部分即可,那該有多爽啊!

          確實(shí)如樓主所言,我看到一些國(guó)外項(xiàng)目基于RCP的應(yīng)用比較多!

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖  回復(fù)  更多評(píng)論   

          2009-04-02 14:11 by 王廣
          樓主可以講一下怎么在Action中寫(xiě)個(gè)方法,打開(kāi)自己擴(kuò)展的關(guān)閉了的視圖嗎
          還要什么配置嗎,能給個(gè)列子嗎,多謝

          發(fā)我qq郵箱吧 542652620@qq.com

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖  回復(fù)  更多評(píng)論   

          2009-04-17 10:00 by 創(chuàng)意產(chǎn)品網(wǎng)
          不錯(cuò)。

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖  回復(fù)  更多評(píng)論   

          2009-12-07 10:56 by lin
          寫(xiě)得很詳細(xì),太感謝了。

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖  回復(fù)  更多評(píng)論   

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

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖[未登錄](méi)  回復(fù)  更多評(píng)論   

          2012-02-10 09:52 by 小周
          @海邊沫沫
          樓主,有問(wèn)題請(qǐng)教。
          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);
          }
          }
          }
          共十個(gè)View,希望得到第一個(gè)上1中1下3和上1下四的兩種布局,第一個(gè)可以正常顯示,但是第二個(gè)不能正常顯示,修改參數(shù)也不成功。希望樓主給以指導(dǎo)。QQ:836233095,謝謝

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖  回復(fù)  更多評(píng)論   

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

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖[未登錄](méi)  回復(fù)  更多評(píng)論   

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

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖[未登錄](méi)  回復(fù)  更多評(píng)論   

          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);
          }
          }
          此段代碼根本不執(zhí)行...125909696

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖  回復(fù)  更多評(píng)論   

          2013-03-25 23:21 by orangey
          @tony
          擴(kuò)展 org.eclipse.ui.perspectiveExtensions, 然后把view 添加進(jìn)去

          <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進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖  回復(fù)  更多評(píng)論   

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

          關(guān)于Perspective.createInitialLayout的問(wèn)題:

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

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

          # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖  回復(fù)  更多評(píng)論   

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

          關(guān)于IPerspectiveFactory.createInitialLayout不執(zhí)行的問(wèn)題:

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

          具體見(jiàn):http://rubenlaguna.com/wp/2007/04/23/new-views-dont-show-up-when-using-eclipse-rcp-setsaveandrestore/
          主站蜘蛛池模板: 龙胜| 青海省| 磐石市| 泰安市| 清丰县| 岳阳市| 桦川县| 凉山| 永胜县| 贵溪市| 隆尧县| 册亨县| 庄河市| 沂水县| 商丘市| 四川省| 贵港市| 儋州市| 通许县| 全州县| 滕州市| 漳浦县| 福州市| 博客| 九台市| 敦煌市| 潮安县| 临安市| 清原| 汝城县| 青浦区| 营山县| 甘孜| 横峰县| 永济市| 新化县| 称多县| 翼城县| 安福县| 增城市| 韶山市|