Java RAP中是否支持非类型化事件?
我正在开发一个基于RCP的应用程序。最近,我把它改成了说唱。以前,我在RCP中使用了一些非类型化事件来传递用于不同目的的一些必要数据。 例如,我有一个名为“获取数据”的按钮从服务器获取数据。我有一些tableviewer来保存从服务器接收的数据。当用户单击此按钮时,我想引发一个事件,并且在每个表中都将侦听该事件。我是这样做的:Java RAP中是否支持非类型化事件?,java,events,eclipse-rcp,jface,eclipse-rap,Java,Events,Eclipse Rcp,Jface,Eclipse Rap,我正在开发一个基于RCP的应用程序。最近,我把它改成了说唱。以前,我在RCP中使用了一些非类型化事件来传递用于不同目的的一些必要数据。 例如,我有一个名为“获取数据”的按钮从服务器获取数据。我有一些tableviewer来保存从服务器接收的数据。当用户单击此按钮时,我想引发一个事件,并且在每个表中都将侦听该事件。我是这样做的: //Part 1 Button btgetData=new Button(compositeLabels,SWT.PUSH); btgetData.se
//Part 1
Button btgetData=new Button(compositeLabels,SWT.PUSH);
btgetData.setText("Get Data");
btgetData.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
//raise event here
Event event =new Event();
event.detail=12345;
getRoot().getShell().notifyListeners(MYEVENTCONST, event);
}
});
//Part 2:
//In each composite that hold TableViewer , listen event
getShell().addListener(MYEVENTCONST, new Listener()
public void handleEvent(Event event) {
if(event.detail==12345)
doProcessing();
});
在RCP中,每次用户单击“获取数据”按钮时,每个TableViewer都会正常侦听该事件。但它对RAP不起作用,我不知道RAP是否已经支持这种非类型事件。从未调用doProcessing()函数:(
我不想更改传递数据的方式。请告诉我是否可以继续使用旧的方式。我非常感谢您的评论。RAP中目前不支持自定义事件类型(主要原因是) 但是,尽管您可以在SWT中这样做,但我认为这是对SWT事件的误用。对于自定义小部件,它可能是可接受的,但是这些方法是在应用程序级别上使用它们时在WIDGET级别上保留的。明确指出: 事件类型是类
SWT
中定义的事件常量之一
您可以让复合材料实现自定义接口,而不是使用自定义事件:
public interface ProcessingControl {
void doProcessing();
}
并定义递归遍历组合的子级的更新方法:
static void updateChildren( Composite parent ) {
for( Control child : parent.getChildren() ) {
if( child instanceof ProcessingControl ) {
( ( ProcessingControl )child ).doProcessing();
}
if( child instanceof Composite ) {
updateChildren( ( Composite )child );
}
}
}
然后可以调用updateChildren(shell);
如果您更喜欢使用事件和侦听器,那么应该使用java.util.EventObject
和EventListener