Java TableViewer的“addSelectionChangedListener”和“addDoubleClickListener”冲突

Java TableViewer的“addSelectionChangedListener”和“addDoubleClickListener”冲突,java,swt,jface,tableviewer,Java,Swt,Jface,Tableviewer,所有相关 使用JFace TableViewer,我想选择一些entrye.g通过单击选择一个文件,并执行一些其他操作,例如通过双击进入目录 注意到addSelectionChangedListener和addDoubleClickListener通过网页:,我为TableViwer添加了SelectionChangedListener和DoubleClickListener,并发现: 两个侦听器中的任何一个都可以工作,但它们不能一起工作-实际上是DoubleClickListener不能工作

所有相关

使用JFace TableViewer,我想选择一些entrye.g通过单击选择一个文件,并执行一些其他操作,例如通过双击进入目录

注意到addSelectionChangedListener和addDoubleClickListener通过网页:,我为TableViwer添加了SelectionChangedListener和DoubleClickListener,并发现: 两个侦听器中的任何一个都可以工作,但它们不能一起工作-实际上是DoubleClickListener不能工作

有什么问题吗?我应该如何为单击和双击实现侦听器? 如有任何意见,我们将不胜感激

关于代码: 我创建了一个tableViewer,并希望显示文件系统结构。 预期行为:用户可以双击目录条目,tableViewer将显示所选目录的结构;用户通过单击选择通用文件。对于其他操作,将显示警告消息对话框

下面是与事件处理程序相关的代码

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添加到它们?