-
问题内容:插件开发中如何在两个视图之间实现事件监听
- 原讨论链接:http://community.csdn.net/expert/topicview1.asp?id=5416153
- 所属论坛:Eclipse
审核组:JAVA
- 提问者:honglonglong258
解决者:fulong258
- 感谢:
- 关键字:Java 视图 eclipse 插件开发 事件监听 扩展点
- 答案:
两个视图中的组件之间的互动
比如单击视图1列表中的某项时,视图2的文本框也作相应显示。
---------------------------------------------------------------
修改View1.java、View2.java
Eclipse通过plugin.xml来加载插件和插件中的扩展点(如视图),所以可以由视图的id标识来取得视图对象,具体语句如下:
IWorkbenchPage wbp = getViewSite().getPage();
IViewPart view2 = wbp.findView("cn.com.chengang.View2");
得到了视图2的对象后,其他一切就都好办了,先给出修改后View1如下:
public class View1 extends ViewPart {
public void createPartControl(Composite parent) {
Composite topComp = new Composite(parent, SWT.NONE);
topComp.setLayout(new FillLayout());
final List list = new List(topComp, SWT.BORDER);
list.add("中国");
list.add("美国");
list.add("法国");
//列表选择事件监听
list.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
//由IWorkbenchPage取出view2
IWorkbenchPage wbp = getViewSite().getPage();
IViewPart view2 = wbp.findView("cn.com.chengang.View2");
//将当前选择的列表项显示在文本框中
Text text = ((View2) view2).getText();
text.setText(list.getSelection()[0]);
}
public void widgetDefaultSelected(SelectionEvent e) {}
});
}
public void setFocus() {}
}
然后将View2的文本框对象改成类的实例变量,并编写它相应的set/get方法
public class View2 extends ViewPart {
private Text text;
public void createPartControl(Composite parent) {
Composite topComp = new Composite(parent, SWT.NONE);
topComp.setLayout(new FillLayout());
text = new Text(topComp, SWT.BORDER);
text.setText("我是text框");
}
public void setFocus() {}
//文本框text相应的set/get方法
public Text getText() {return text;}
public void setText(Text text) {this.text = text;}
}
- 评价:
给朵鲜花(1)
扔个鸡蛋(2)