2013-12-19 51 views
-2

我創建了一個tableViewer。 tableViewer可能會更新。如何在tableViewer中捕捉變化焦點的事件?

表的更新處於行內模式,意味着行Ii的更改將更新表。

問題是如果我將焦點更改爲不同的視圖(大綱,任務...)或不同的窗口,我想捕獲表格焦點發生改變的事件(行仍然標記,這是該selectionChanegd事件未被觸發的原因)

這是事件,對於的SelectionChanged

gridController.addSelectionChangedListener(new ISelectionChangedListener() { 
     .. do update 

}

該事件不是當我改變聚焦到不同的窗口中,視圖觸發。

你知道在不同的方式來捕捉表的重點的變化嗎?

+0

能否請你澄清一下,你做了什麼,比一個行嗎?也正確標記問題。 – mico

+0

您是否嘗試過FocusListener,它有FocusLost事件?如果沒有代碼雖然不能說是不斷變化的方法或調試現有代碼解決了這個問題.. – mico

+0

看看這個鏈接,它可以幫助你 http://stackoverflow.com/questions/8852574/swt-table-如何設置獲取重點排 –

回答

0

試試這個:

import java.util.ArrayList; 
import java.util.List; 

import org.eclipse.jface.viewers.ArrayContentProvider; 
import org.eclipse.jface.viewers.ISelectionChangedListener; 
import org.eclipse.jface.viewers.LabelProvider; 
import org.eclipse.jface.viewers.SelectionChangedEvent; 
import org.eclipse.jface.viewers.StructuredSelection; 
import org.eclipse.jface.viewers.TableViewer; 
import org.eclipse.swt.SWT; 
import org.eclipse.swt.layout.FillLayout; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Shell; 

public class TestCase { 

private static List<String> model = new ArrayList<String>(); 
private static TableViewer viewer; 

public static void main(String[] args) { 
    final Display display = new Display(); 
    final Shell shell = new Shell(display); 
    shell.setLayout(new FillLayout()); 

// viewer = new TableViewer(shell, SWT.SINGLE | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL | SWT.VIRTUAL); 
    viewer = new TableViewer(shell, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.VIRTUAL); 

    viewer.getTable().setHeaderVisible(true); 
    viewer.getTable().setLinesVisible(true); 
    viewer.setUseHashlookup(true); 

    viewer.setContentProvider(ArrayContentProvider.getInstance()); 
    viewer.setLabelProvider(new LabelProvider()); 

    model.add("element2"); 
    model.add("element1"); 
    model.add("element0"); 

    viewer.setInput(model); 

    viewer.setSelection(new StructuredSelection(model.get(1))); 

    viewer.addSelectionChangedListener(new ISelectionChangedListener() { 

     @Override 
     public void selectionChanged(SelectionChangedEvent event) { 
      System.out.println("selection changed"); 
     } 
    }); 

    addContent(); 

    shell.setSize(400, 400); 
    shell.open(); 

    while (!shell.isDisposed()) { 
     if (!display.readAndDispatch()) { 
      display.sleep(); 
     } 
    } 
} 

private static void addContent() { 
    Display.getCurrent().timerExec(2000, new Runnable() { 

     @Override 
     public void run() { 
      model.add(0, "element" + model.size()); 
      viewer.refresh(); 
      addContent(); 
     } 
    }); 
} 

} 
+0

它沒有工作:( – user1365697