Java TableViewer的“addSelectionChangedListener”和“addDoubleClickListener”冲突
所有相关 使用JFace TableViewer,我想选择一些entrye.g通过单击选择一个文件,并执行一些其他操作,例如通过双击进入目录 注意到addSelectionChangedListener和addDoubleClickListener通过网页:,我为TableViwer添加了SelectionChangedListener和DoubleClickListener,并发现: 两个侦听器中的任何一个都可以工作,但它们不能一起工作-实际上是DoubleClickListener不能工作 有什么问题吗?我应该如何为单击和双击实现侦听器? 如有任何意见,我们将不胜感激 关于代码: 我创建了一个tableViewer,并希望显示文件系统结构。 预期行为:用户可以双击目录条目,tableViewer将显示所选目录的结构;用户通过单击选择通用文件。对于其他操作,将显示警告消息对话框 下面是与事件处理程序相关的代码Java TableViewer的“addSelectionChangedListener”和“addDoubleClickListener”冲突,java,swt,jface,tableviewer,Java,Swt,Jface,Tableviewer,所有相关 使用JFace TableViewer,我想选择一些entrye.g通过单击选择一个文件,并执行一些其他操作,例如通过双击进入目录 注意到addSelectionChangedListener和addDoubleClickListener通过网页:,我为TableViwer添加了SelectionChangedListener和DoubleClickListener,并发现: 两个侦听器中的任何一个都可以工作,但它们不能一起工作-实际上是DoubleClickListener不能工作
tableView.addSelectionChangedListener( new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection sel = (IStructuredSelection) tableView.getSelection();
File selFile = (File) sel.getFirstElement();
if(selFile != null){
if (selFile.isDirectory()) {
MessageDialog.openWarning(getShell(), "Warning", "You select a directory");
return;
}
System.out.println("Selected : "+ selFile.getAbsolutePath());
selectFileName = selFile.getAbsolutePath();
}
}
});
tableView.addDoubleClickListener( new IDoubleClickListener() {
@Override
public void doubleClick(DoubleClickEvent arg0) {
Object selected;
IStructuredSelection selection = (IStructuredSelection) tableView.getSelection();
if (selection.size() != 1) return;
selected = selection.getFirstElement();
File file = (File) selected;
if (file.isFile()) {
MessageDialog.openInformation(getShell(),"Warning", "You double-clicks a generic file");
return;
}
if (file.isDirectory()) {
System.out.println("Clicked direcotry: " + file.getAbsolutePath());
//applyNewDirectory(file);
}
}
});
问候和感谢来自
Sunzen序言:这里仍在使用JFace/SWT,因此可能有人对此感兴趣 问题是API允许您这样做,但它不起作用哦SWT。。。。 不能在TableView上同时使用两个侦听器,因为SelectionChangedListener将始终捕获单击并使用事件 解决方案是将SelectionChangedListener附加到基础表,将DoubleClickListener附加到TableViewer。 这样,您可以同时拥有这两种功能,例如:
table.addSelectionChangedListener(new ISelectionChangedListener(...));
tableViewer.addDoubleClickListener(new IDoubleClickListener(...));
“无法工作”是什么意思?我的意思是:添加的侦听器按预期响应UI事件,例如,当用户单击TableViewer中的某个条目时执行一些操作,当用户双击TableViewer中的某个条目时执行一些其他操作如果他们按预期响应,那么问题出在哪里?也许发布一些代码有助于理解您的问题。对不起,我的输入错误。我的意思是,添加的侦听器不会像预期的那样响应UI事件。好的,我将发布一些代码-发布所有可行的代码并不容易。两个侦听器中的哪一个被执行?您是否尝试将System.out.println添加到它们?