Eclipse插件开发之透视图

添加org.eclipse.ui.perspectives扩展点

<extension point="org.eclipse.ui.perspectives">
    <perspective
        class="test.view.TestPerspectives"
        id="test.view.testPerspectives"
        name="bb测试">
    </perspective>
</extension>

添加三个普通的视图

<extension point="org.eclipse.ui.views">
    <view
        class="test.view.TestViewGreyWolf"
        id="Test.view.testViewGreyWolf"
        name="灰太狼"
        restorable="true">
    </view>
    <view
        class="test.view.TestViewGreatBear"
        id="Test.view.testViewGreatBear"
        name="大熊"
        restorable="true">
    </view>
    <view
        class="test.view.TestViewCasio"
        id="Test.view.testViewCasio"
        name="卡西欧"
        restorable="true">
    </view>
</extension>

编写三个视图的扩展点实现类

package test.view;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.List;
import org.eclipse.ui.part.ViewPart;
/**
 * 大熊
 * @author Watson
 *
 */
public class TestViewGreatBear extends ViewPart {

	@Override
	public void createPartControl(Composite arg0) {
	    List list = new List(arg0, SWT.BORDER);
	    list.add("大熊");	
	}

	@Override
	public void setFocus() {
	    // TODO Auto-generated method stub
		
	}

}


package test.view;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.List;
import org.eclipse.ui.part.ViewPart;

/**
 * 灰太狼
 * 
 * @author Watson
 *
 */
public class TestViewGreyWolf extends ViewPart {

	@Override
	public void createPartControl(Composite arg0) {
	    // Label label = new Label(arg0, SWT.LEFT);
	    // label.setText("灰太狼");
	    List list = new List(arg0, SWT.BORDER);
	    list.add("灰太狼");
	}

	@Override
	public void setFocus() {
	    // TODO Auto-generated method stub

	}

}


package test.view;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.List;
import org.eclipse.ui.part.ViewPart;

/**
 * 卡西欧
 * 
 * @author Watson
 *
 */
public class TestViewCasio extends ViewPart {

	@Override
	public void createPartControl(Composite arg0) {
	    List list = new List(arg0, SWT.BORDER);
	    list.add("卡西欧");
	}

	@Override
	public void setFocus() {
	    // TODO Auto-generated method stub

	}

}

写一个空的Perspective的实现类

package test.view;

import org.eclipse.ui.IPageLayout;
import org.eclipse.ui.IPerspectiveFactory;

public class TestPerspectives implements IPerspectiveFactory {

	@Override
	public void createInitialLayout(IPageLayout arg0) {
	    // TODO Auto-generated method stub
	}

}

这时,运行一下.如果将视角切换到bb测试的话,就能看到,该视角下没有任何视图.如果将通过,Window->show view->other将视图弄出来.

173103_AEro_2009130.jpg

173147_RUf3_2009130.jpg

173947_kPW0_2009130.jpg

添加布局的代码

package test.view;

import org.eclipse.ui.IPageLayout;
import org.eclipse.ui.IPerspectiveFactory;

public class TestPerspectives implements IPerspectiveFactory {

	@Override
	public void createInitialLayout(IPageLayout arg0) {
	    // 将view1添加到编辑区的左边,占水平比例的20%
	    arg0.addView("Test.view.testViewGreyWolf", 
	        IPageLayout.LEFT, 0.2f, "org.eclipse.ui.editorss");
	    // 将view2添加到编辑区的下方,占竖直比例的20%
	    arg0.addView("Test.view.testViewGreatBear", 
	        IPageLayout.BOTTOM, 0.8f, "org.eclipse.ui.editorss");
	    // 将view3添加到编辑区的,占水平比例的30%
	    arg0.addView("Test.view.testViewCasio", 
	        IPageLayout.RIGHT, 0.7f, "org.eclipse.ui.editorss");
	    //
	    arg0.setEditorAreaVisible(true);
	}

}

可以得到如下的视图

110131_6l7G_2009130.jpg

运行的技巧,如果您第一次运行的程序是在A文件下,那么再次运行的时候请换到B文件夹,并点击应用,这样才能保证,每次运行,载入的是最新的布局信息,而不是用户上次退出后保存的布局信息:

111201_ICaR_2009130.jpg

视图的效果:

 注意本例是以editorArea为查考区域,其中,org.eclipse.ui.editorss为编辑区对应的ID。

111752_qg0h_2009130.jpg

这可不是我调过的哦,绝对是点视角运行出来的布局。

不过,如果仅是上面的东西,那和其他的树上说的就没有任何不同了。

下面谈一谈布局的一些经验。

大家都知道layout的addView的方法里有一个参数是参考视图的Id,这个是要仔细处理的。

112738_uVQl_2009130.jpg

如果要实现如图所示的不局,该怎么编写代码呢?

注意连个圈里的两个视图是绑定到一起的,即左右移动改变大小时一起变动的,当然有几种加法。不过,基本思想是一样的。

  1,选定一个视图作为底层,如,将view1作为底层,先添加到视角的布局中。

     即arg0.addView("Test.view.testViewGreyWolf", IPageLayout.LEFT, 0.2f, "org.eclipse.ui.editorss");

  2,将其他的视图以上面的底层视图的ID作为refID,

     如:

      arg0.addView("Test.view.testViewGreatBear", IPageLayout.BOTTOM, 0.6f, "Test.view.testViewGreyWolf");

      可以将View2和View1绑定到一起。view2在view1的下面。

package test.view;

import org.eclipse.ui.IPageLayout;
import org.eclipse.ui.IPerspectiveFactory;
/**
 * 
 * @author Watson
 *
 */
public class TestPerspectives implements IPerspectiveFactory {

	@Override
	public void createInitialLayout(IPageLayout arg0) {
	    // 将view1添加到编辑区的左边,占水平比例的20%
	    arg0.addView("Test.view.testViewGreyWolf", 
	        IPageLayout.LEFT, 0.2f, "org.eclipse.ui.editorss");
	    // 将view2添加到编辑区的下方,占竖直比例的20%
	    arg0.addView("Test.view.testViewGreatBear", 
	        IPageLayout.BOTTOM, 0.8f, "org.eclipse.ui.editorss");
	    // 将view3添加到编辑区的,占水平比例的30%
	    arg0.addView("Test.view.testViewCasio", 
	        IPageLayout.RIGHT, 0.7f, "org.eclipse.ui.editorss");
	    //将view2添加到view1下面
	    arg0.addView("Test.view.testViewGreatBear", 
	        IPageLayout.BOTTOM, 0.6f, "Test.view.testViewGreyWolf");
		
		arg0.setEditorAreaVisible(true);
	}

}



利用这两种思想可以定制出任意复杂的视图布局。


113401_2JZB_2009130.jpg



整理转自:http://blog.sina.com.cn/s/blog_5ae6b7060100aya8.html






转载于:https://my.oschina.net/u/2009130/blog/311959

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值