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

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

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

    posts - 20, comments - 16, trackbacks - 0, articles - 0

    當視圖之間有聯系時,當關掉某個視圖時,其他視圖怎樣知道并作出一些動作,找了很久,找到一些資料,加上自己的總結,放上來。

    先轉載這篇資料,來自:http://blog.csdn.net/starshus/archive/2006/01/04/570540.aspx
    -----------------------------------------------------------------------------------------------

    1.判斷這個view當前是否為active的好方法:

     

    private boolean isActivePart() {
            IWorkbenchPart part 
    = getViewSite().getPage().getActivePart();
            
    return part != null && part.equals(this);        
    }


    2.自己的rcp程序里有多個view,它們之間是有聯系的,如果關掉其中一個view時,
    要做些事,怎么知道它是什么時候關掉的呢?我在rcp的新聞組上找到了答案:

    關掉Editor或Viewer時調用自己邏輯的方法:

    1)如果是editor,那么讓它實現org.eclipse.ui.ISaveablePart2接口.

    2)如果是view,在view class里面加上下面這個方法,并且調用它,比如:
    在ViewPart#init()里面:

    private void initPartListener() {
    getSite().getPage().addPartListener(
    new IPartListener() {

        
    public void partOpened(IWorkbenchPart part) {
            
    if (part != YourPartView.this{
                
    return;
            }
     else {
                
    // your logics
            }

        }


        
    public void partDeactivated(IWorkbenchPart part) {
            
    if (part != YourPartView.this{
                
    return;
            }
     else {
            
    // your logics
            }

        }


        
    public void partClosed(IWorkbenchPart part) {
            
    if (part != YourPartView.this{
                
    return;
            }
     else {
                
    // your logics
            }

        }


        
    public void partBroughtToTop(IWorkbenchPart part) {
            
    if (part != YourPartView.this{
                
    return;
            }
     else {
                
    // your logics
            }

        }


        
    public void partActivated(IWorkbenchPart part) {
            
    if (part != YourPartView.this{
                
    return;
            }
     else {
                
    // your logics
            }

            }

        }
    );
    }





    或者這樣寫也可以:
    讓這個view類實現PartListener接口
    然后在這個view的createPartControl()里加上:
    getViewSite().getPage().addPartListener(this);

    或是這樣寫:

     

    public void createPartControl(Composite parent) {
                    
                getSite().getWorkbenchWindow(). getPartService().addPartListener(
    this);
    }

    public void dispose() 
               getSite().getWorkbenchWindow(). getPartService().removePartListener(
    this);
    }




    注意:

    1)Views也能實現ISaveablePart2

    2)在view關閉時要做什么事時,建議就用IPartListener2

    3)View上的X是與關閉動作關聯在一起的,要用別的方法達到目的你只有寫自己的
    關閉動作.

    4)ISaveablePart有意義嗎?
    當然有,有些程序的data model在view上,它們能被修改,所以它們必須有在view
    關閉時保存的能力.(所以用戶的修改不會丟失)
    有些時候editors不適合展示數據model.

    -----------------------------------------------------------------------------------------------
    以上文章轉載自:http://blog.csdn.net/starshus/archive/2006/01/04/570540.aspx 感謝原作者。

    實際使用中,發現其實有兩個,IPartListener 和 IPartListener2 ,都在包org.eclipse.ui中。他們的區別在于IPartListener2 更加豐富一些,多了 Hidden,Visible,InputChanged 這三個事件,而且參數也有區別。
    IPartListener 里面的方法的參數為 :IWorkbenchPart part
    IPartListener2 里面的方法的參數為:IWorkbenchPartReference partRef

    當使用 IPartListener2 時,要獲取到part,這樣就行: partRef.getPart(false)

    關于IPartListener(2)結合view或action使用的方式,轉載的文章已經講得很清楚了,感覺不錯,謝謝原作者。

    在action中,我是在構造函數和dispose函數中分別加入和取消的,代碼如下:

     

    public class MenuHandler extends AbstractHandler implements ISelectionChangedListener , IPartListener {
        
    /**
         * The constructor.
         * 
         * 
    @throws EngineException
         
    */

        
    public MenuHandler() {
            AuditPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow()
                    .getActivePage().addPartListener(
    this);
        }


        @Override
        
    public void dispose() {
            AuditPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow()
                    .getActivePage().removePartListener(
    this);
            
    super.dispose();
        }



    @Override
        
    public void partActivated(IWorkbenchPart part) {
            System.out.println();
        }

        
        

        @Override
        
    public void partBroughtToTop(IWorkbenchPart part) {
            
    // TODO Auto-generated method stub
            System.out.println();
        }


        @Override
        
    public void partClosed(IWorkbenchPart part) {
            
    // TODO Auto-generated method stub

        }


        @Override
        
    public void partDeactivated(IWorkbenchPart part) {
            
    // TODO Auto-generated method stub

        }


        @Override
        
    public void partOpened(IWorkbenchPart part) {
            
    // TODO Auto-generated method stub
            if (part instanceof MyShootView) {
                ((MyShootView) part)
                        .addSelectionChangedListener(
    this);

        }





    }


    不過需要注意,eclipse里面有些視圖,例如 ContentOutline視圖即大綱視圖,當你第一次打開它,會觸發partOpen 事件,然后立刻觸發 partVisible 事件,當你再關掉它,則只會觸發 partHidden 事件,而不會觸發close。所以他們實際上是沒有真正的關閉,當第一次打開以后,都會一直存在,知道eclipse退出。

    而用戶自己建立的view,好像就不是這樣運作的,當第一次打開的時候,會觸發open和visible事件,當關閉時,會觸發hidden和close事件。


    這種情況,就要使用IPartListener2來實現了。




     

    主站蜘蛛池模板: 色窝窝亚洲AV网在线观看| 91精品国产亚洲爽啪在线影院| 亚洲综合精品成人| 亚洲AⅤ优女AV综合久久久| 亚洲欧美日韩一区二区三区在线| 黄页网站在线观看免费高清| 亚洲av无码片在线观看| 亚洲AV日韩AV无码污污网站| 成全动漫视频在线观看免费高清版下载| 亚洲国产精品人人做人人爽| 亚洲国产av美女网站| aa级一级天堂片免费观看| 亚洲一区二区久久| 午夜网站免费版在线观看| 色噜噜亚洲精品中文字幕| 亚洲精品欧洲精品| 国产一级在线免费观看| 国产无遮挡吃胸膜奶免费看视频| 亚洲色成人网站WWW永久| 全免费a级毛片免费看| 亚洲的天堂av无码| 永久免费观看的毛片的网站| 亚洲性色成人av天堂| 日韩免费电影网站| 亚洲日本va在线观看| 18禁止看的免费污网站| 亚洲国产综合在线| 午夜国产大片免费观看| 亚洲欧洲无码AV不卡在线| 亚洲A∨精品一区二区三区| 国产午夜不卡AV免费| 亚洲福利电影一区二区?| 国产jizzjizz视频全部免费| 国产精品99精品久久免费| 亚洲视频在线观看2018| jjzz亚洲亚洲女人| 99久久国产热无码精品免费| 亚洲视频在线一区| 国产免费人成视频在线观看| 国产精品免费福利久久| 亚洲AV无码专区在线电影成人 |