java rcp 视图 通讯_关于java:在Eclipse RCP中显示视图时传递参数

我正在创建Eclipse RCP应用程序,并且在显示视图时遇到传递参数的问题。

作为第一种方法,我尝试在View1的View2中设置静态变量,然后打开该视图(如下所示)。有用。

IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();

String viewIdToClose = studentListView.ID;

IViewPart viewToClose = activePage.findView(viewIdToClose);

TableItem item = studentTable.getItem(studentTable.getSelectionIndex());

String text = item.getText(ListViewConstants.TABLE_COLUMN_ONE);

activePage.hideView(viewToClose);

try {

String viewIdToOpen = StudentReview.ID;

StudentReview.userId = text;

activePage.showView(viewIdToOpen);

} catch (PartInitException e) {...}

由于这似乎不是一个好方法,因此我按照以下链接中提到的建议进行了尝试(可接受的答案)。

将参数传递给视图

。在这种方法中,我们只有在显示视图后才能传递参数。

但是我有一个问题是,要打开的视图在调用showView()时应该具有所选行中的值,即我想根据视图1的选择填充视图2中的参数。

有什么办法可以做到这一点?使用PULL代替PUSH方法好吗?

任何建议表示赞赏。

谢谢!!!

更新1:

将参数传递给视图中提到的方法

接口:

public interface ICommunicationView extends IViewPart{

public void accept(Object parameter);

}

调用accept():

IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();

String viewIdToClose = StudentListView.ID;

IViewPart viewToClose = activePage.findView(viewIdToClose);

TableItem item = studentTable.getItem(studentTable.getSelectionIndex());

String text = item.getText(ListViewConstants.TABLE_COLUMN_ONE);

activePage.hideView(viewToClose);

try {

String viewIdToOpen = StudentReview.ID;

ICommunicationView viewToOpen = (ICommunicationView) activePage.showView(viewIdToOpen);

viewToOpen.accept(text);//Sending userId to Review view

} catch (PartInitException e) { ... }

StudentReviewView:

private String studentId;

//getters and setters

@Override

public void accept(Object parameter) {

setStudentId(parameter.toString());

}

public void createPartControl(final Composite parent) {

...

System.out.println("Student Id" + this.getStudentId());

}

它将学生ID打印为null。

我是否缺少明显的东西?

谢谢!

为什么您提到的链接上接受的答案不能解决您的问题? 如果在调用showView之后将userId发送到StudentReviewView,它将在打开后立即填充,不是吗?

实际上,我将学生数据存储在名称为.xml的XML文件中。 在审阅视图的createPartControl()中,我将解组相应的XML文件并填充组件。 为此,我在调用createPartControl()时需要有StudentId。 在这种情况下,我将学生ID设置为null,因为在发送学生ID之前调用了createPartControl()。 我已经更新了我的问题。 PS:我已经将变量名从userId更改为StudentId。

这是个不错的链接,试试看。

感谢您的链接。 它有很多有用的信息。 不幸的是,由于我没有使用E4,因此上述方法不能满足我的要求。 另外我不确定是否可以使用事件处理机制,因为在显示它之前View2需要该值。

当activePage.showView(viewIdToOpen)打开视图时,平台调用createPartControl。 因此,请勿在createPartControl上填充字段。 调用setStudentId时执行此操作。

谢谢。 将尝试这种方法。

我也遇到了这个问题。 通过重新打包需要更新的特定视图组件,找到了解决之道。

这是设置字符串的概念证明:

设置器界面:

public interface ViewSetter {

void setMessage(String message);

}

已初始化的视图:

//view that implements ViewSetter

@Override

public void createPartControl(Composite parent) {

label = new Label(parent, SWT.NONE); //label is a field

}

@Override

public void setMessage(final String message) {

Display.getDefault().syncExec(new Runnable() {

@Override

public void run() {

label.setText(message);

label.pack(true);

}

});

}

创建和初始化视图的代码:

IViewPart view = page.showView(viewID);

ViewSetter viewSetter = (ViewSetter)view;

viewSetter.setMessage("Hello World");

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页

打赏作者

真知·高杨

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值