分享
 
 
 

RCP II:扩展通用工作台(2-1)

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

2、定义视图

(1)视图概述

l 视图在 Eclipse 工作台中是可视化容器,允许用户显示或导航特定类型的资源

l 视图负责从域模型中显示数据,应当将相似类型的对象分组到同一个视图中

l 这种方法使用户为完成特定任务在视图之间切换的需求最小化

l 应用程序包含的视图数量很大程度上依赖于应用程序的规模和复杂程度

l 本教程中的Google应用程序示例有两个视图,一个用于查询和显示查询结果,另一个用于显示查询结果的Web页面

(2)定义org.eclipse.ui.views扩展

}

<extension

point="org.eclipse.ui.views">

<category

name="Google"

id="com.xqtu.google.views"/>

<view

class="com.xqtu.google.views.SearchView"

category="com.xqtu.google.views"

name="Search"

id="com.xqtu.google.views.SearchView"/>

<view

class="com.xqtu.google.views.BrowserView"

category="com.xqtu.google.views"

name="Browser"

id="com.xqtu.google.views.BrowserView"/>

</extension>

l 在plugin.xml中定义org.eclipse.ui.views扩展

l <category>定义目录(用于分组);name属性指定目录名称;id属性唯一标识该目录

l <view>定义视图;class属性指定实现org.eclipse.ui.IViewPart接口的视图类全路径,category属性(可选)指定所属目录的id;name属性指定视图名称;id属性唯一标识该视图

l SearchView视图允许用户搜索Google并在列表中显示搜索结果;

BrowserView视图包含一个SWT浏览器控件,根据用户在搜索结果表中的动作显示某个特定URL的Web页面

(3)实现SearchView视图

package com.xqtu.google.views;

import org.eclipse.jface.dialogs.MessageDialog;

import org.eclipse.jface.viewers.DoubleClickEvent;

import org.eclipse.jface.viewers.IDoubleClickListener;

import org.eclipse.jface.viewers.IStructuredSelection;

import org.eclipse.jface.viewers.TableViewer;

import org.eclipse.swt.SWT;

import org.eclipse.swt.events.SelectionEvent;

import org.eclipse.swt.events.SelectionListener;

import org.eclipse.swt.layout.GridData;

import org.eclipse.swt.layout.GridLayout;

import org.eclipse.swt.widgets.Button;

import org.eclipse.swt.widgets.Composite;

import org.eclipse.swt.widgets.Label;

import org.eclipse.swt.widgets.Table;

import org.eclipse.swt.widgets.TableColumn;

import org.eclipse.swt.widgets.Text;

import org.eclipse.ui.internal.dialogs.ViewContentProvider;

import org.eclipse.ui.part.ViewPart;

import com.google.soap.search.GoogleSearch;

import com.google.soap.search.GoogleSearchFault;

import com.google.soap.search.GoogleSearchResult;

import com.google.soap.search.GoogleSearchResultElement;

import com.xqtu.google.wizards.LicenseKeyWizard;

public class SearchView extends ViewPart implements IDoubleClickListener {

public static final String ID = "com.xqtu.google.views.SearchView";

private TableViewer tableViewer;

private Text searchText;

private GoogleSearchResultElement model;

public void createPartControl(Composite parent) {

GridLayout gridLayout = new GridLayout();

gridLayout.numColumns = 3;

gridLayout.marginHeight = 5;

gridLayout.marginWidth = 5;

parent.setLayout(gridLayout);

Label searchLabel = new Label(parent, SWT.NONE);

searchLabel.setText("Search:");

searchText = new Text(parent, SWT.BORDER);

searchText.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL

| GridData.HORIZONTAL_ALIGN_FILL));

Button searchButton = new Button(parent, SWT.PUSH);

searchButton.setText(" Search ");

searchButton.addSelectionListener(new SelectionListener() {

public void widgetSelected(SelectionEvent e) {

GoogleSearch search = new GoogleSearch();

search.setKey(LicenseKeyWizard.getLicenseKey());

search.setQueryString(searchText.getText());

try {

GoogleSearchResult result = search.doSearch();

tableViewer.setInput(model);

tableViewer.add(result.getResultElements());

} catch (GoogleSearchFault ex) {

MessageDialog.openWarning(e.display.getActiveShell(),

"Google Error", ex.getMessage());

}

}

public void widgetDefaultSelected(SelectionEvent e) {

}

});

GridData gridData = new GridData();

gridData.verticalAlignment = GridData.FILL;

gridData.horizontalSpan = 3;

gridData.grabExcessHorizontalSpace = true;

gridData.grabExcessVerticalSpace = true;

gridData.horizontalAlignment = GridData.FILL;

tableViewer = new TableViewer(parent, SWT.FULL_SELECTION | SWT.BORDER);

tableViewer.setLabelProvider(new SearchViewLabelProvider());

tableViewer.setContentProvider(new ViewContentProvider());

tableViewer.setInput(model);

tableViewer.getControl().setLayoutData(gridData);

tableViewer.addDoubleClickListener(this);

Table table = tableViewer.getTable();

table.setHeaderVisible(true);

table.setLinesVisible(true);

TableColumn titleColumn = new TableColumn(table, SWT.NONE);

titleColumn.setText("Title");

titleColumn.setWidth(250);

TableColumn urlColumn = new TableColumn(table, SWT.NONE);

urlColumn.setText("URL");

urlColumn.setWidth(200);

}

public void setFocus() {

searchText.setFocus();

}

public void doubleClick(DoubleClickEvent event) {

if (!tableViewer.getSelection().isEmpty()) {

IStructuredSelection ss = (IStructuredSelection) tableViewer

.getSelection();

GoogleSearchResultElement element = (GoogleSearchResultElement) ss

.getFirstElement();

BrowserView.browser.setUrl(element.getURL());

}

}

}

l SearchView扩展ViewPart, ViewPart是所有工作台视图的抽象基类

l 这里必须实现createPartControl和setFocus抽象方法,前者负责创建用户界面控件,后者用于设置缺省焦点

l SearchView使用GridLayout布局视图,主要的控件是SWT风格的标题、文本域(搜索内容)、按钮和表格(搜索结果)

l 视图按3个单元列布局,Search标题、文本域、Search按钮在一行上,表格独占3列

l Search按钮增加SelectionListener监听器,在用户选择(即点击)按钮时,执行Google搜索

l SelectionListener监听器需要实现widgetSelected和widgetDefaultSelected方法,而Google搜索功能放在widgetSelected方法中

l Google搜索:创建GoogleSearch对象;设置License Key,本教程是通过向导(后面介绍)来收集License Key值;设置查询内容(由文本域获得);执行doSearch方法进行搜索,搜索结果返回GoogleSearchResult对象;将搜索结果加载到表格中;如果搜索时出错,显示警告信息

l 表格控件使用JFace的TableViewer视图来封装

l 首先是使用GridData设置表格控件的布局:占3个网格单元列,水平和垂直拉伸并全占整个单元

l 设置TableViewer视图:具有整行全选和边框风格;使用SearchViewLabelProvider对象(后面介绍)来设置表格每行的列值;使用前面的GridData对象设置表格控件的布局;增加双击事件的监听器,在用户双击时在

BrowserView视图中显示指定URL的页面

l 增加双击事件的监听器是通过SearchView视图实现IdoubleClickListener接口的方法实现,添加doubleClick方法实现具体功能

l 最后设置表格的标题头和列的宽度

l setFocus方法比较简单,设置文本域获得缺省焦点

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有