Java 如何在tableViewer中捕获更改行焦点的事件?
我创建了一个tableViewer。 可以更新tableViewer 表的更新处于内联模式,这意味着第二行的更改将更新表 问题是,如果我将焦点更改为不同的视图(大纲、任务…)或不同的窗口,我希望捕获表焦点更改的事件。(该行仍然标记,这就是selectionChanegd事件未触发的原因) 这是selectionChanged的事件Java 如何在tableViewer中捕获更改行焦点的事件?,java,Java,我创建了一个tableViewer。 可以更新tableViewer 表的更新处于内联模式,这意味着第二行的更改将更新表 问题是,如果我将焦点更改为不同的视图(大纲、任务…)或不同的窗口,我希望捕获表焦点更改的事件。(该行仍然标记,这就是selectionChanegd事件未触发的原因) 这是selectionChanged的事件 gridController.addSelectionChangedListener(new ISelectionChangedListener() {
gridController.addSelectionChangedListener(new ISelectionChangedListener() {
.. do update
}
当我将焦点更改为不同的窗口、视图时,事件不会触发
您知道如何用不同的方法捕捉表格焦点的变化吗?试试以下方法:
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();
}
});
}
}
import java.util.ArrayList;
导入java.util.List;
导入org.eclipse.jface.viewers.ArrayContentProvider;
导入org.eclipse.jface.viewers.iSelectChangedListener;
导入org.eclipse.jface.viewers.LabelProvider;
导入org.eclipse.jface.viewers.SelectionChangedEvent;
导入org.eclipse.jface.viewers.StructuredSelection;
导入org.eclipse.jface.viewers.TableViewer;
导入org.eclipse.swt.swt;
导入org.eclipse.swt.layout.FillLayout;
导入org.eclipse.swt.widgets.Display;
导入org.eclipse.swt.widgets.Shell;
公共类测试用例{
私有静态列表模型=新的ArrayList();
私有静态表查看器;
公共静态void main(字符串[]args){
最终显示=新显示();
最终外壳=新外壳(显示);
setLayout(新的FillLayout());
//查看器=新的TableViewer(shell,SWT.SINGLE | SWT.FULL | U SELECTION | SWT.H | U SCROLL | SWT.V | U SCROLL | SWT.VIRTUAL);
查看器=新的TableViewer(shell,SWT.SINGLE | SWT.H| u SCROLL | SWT.V|u SCROLL | SWT.VIRTUAL);
viewer.getTable().setheadervible(true);
viewer.getTable().setLinesVisible(true);
viewer.setUseHashlookup(true);
setContentProvider(ArrayContentProvider.getInstance());
setLabelProvider(新的LabelProvider());
模型。添加(“元素2”);
型号。添加(“元素1”);
模型。添加(“元素0”);
viewer.setInput(模型);
viewer.setSelection(新结构选择(model.get(1));
viewer.addSelectionChangedListener(新的ISelectionChangedListener(){
@凌驾
公共作废selectionChanged(SelectionChangedEvent事件){
System.out.println(“选择更改”);
}
});
addContent();
外壳设置尺寸(400400);
shell.open();
而(!shell.isDisposed()){
如果(!display.readAndDispatch()){
display.sleep();
}
}
}
私有静态void addContent(){
Display.getCurrent().timerExec(2000,新的Runnable()){
@凌驾
公开募捐{
model.add(0,“元素”+model.size());
viewer.refresh();
addContent();
}
});
}
}
请您澄清一下,除了那一行,您还做了什么?另外,请正确标记问题。您是否尝试过FocusListener等具有FocusLost事件的问题?虽然没有代码,但不能说这是通过更改方法或调试现有代码解决的问题。查看此链接,它可能会帮助您提供更多代码并详细说明您的问题我尝试了event foucs,但它不起作用