添加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将视图弄出来.
添加布局的代码
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); } }
可以得到如下的视图
运行的技巧,如果您第一次运行的程序是在A文件下,那么再次运行的时候请换到B文件夹,并点击应用,这样才能保证,每次运行,载入的是最新的布局信息,而不是用户上次退出后保存的布局信息:
视图的效果:
注意本例是以editorArea为查考区域,其中,org.eclipse.ui.editorss为编辑区对应的ID。
这可不是我调过的哦,绝对是点视角运行出来的布局。
不过,如果仅是上面的东西,那和其他的树上说的就没有任何不同了。
下面谈一谈布局的一些经验。
大家都知道layout的addView的方法里有一个参数是参考视图的Id,这个是要仔细处理的。
如果要实现如图所示的不局,该怎么编写代码呢?
注意连个圈里的两个视图是绑定到一起的,即左右移动改变大小时一起变动的,当然有几种加法。不过,基本思想是一样的。
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); } }
利用这两种思想可以定制出任意复杂的视图布局。
整理转自:http://blog.sina.com.cn/s/blog_5ae6b7060100aya8.html