我在Eclipse / jFace中有一个TableViewer,它可以监听双击事件。
它工作正常,直到我添加一个TableViewer.refresh()方法。 因为双击我更改数据库中的标志,我想显示更改。
问题是事件发生两次,
这是听众的所有代码。
如果我删除:tableCombinadoViewer.refresh(false);我没有让表刷新,但事件只发生一次。:(
table_cuadro.addListener(SWT.MouseDoubleClick, new Listener() {
public void handleEvent(Event event) {
//modifier.setEnabled(true);
TableItem[] selection = table_cuadro.getSelection();
System.out.println("addListener MouseDoubleClick ... Evento MouseDoubleClick");
if (selection.length != 1) {
return;
}
//Cursor cursor = new Cursor(window.getShell().getDisplay(), SWT.CURSOR_WAIT);
window.getShell().setCursor(new Cursor(window.getShell().getDisplay(), SWT.CURSOR_WAIT));
TableItem item = table_cuadro.getSelection()[0];
for (int i = 0; i < table_cuadro.getColumnCount(); i++) {
if (item.getBounds(i).contains(event.x, event.y)) {
//
Grilla fila = (Grilla) item.getData();
BloqueCruzamiento bc_mama = (BloqueCruzamiento) fila.bc_x;
BloqueCruzamiento bc_papa = (BloqueCruzamiento) fila.bc_list_y.get(i- ColFijas); //Tener en cuenta el Subindice si se agregann nuevas columnas fijas.
if (bc_mama.getNroParcela().equals(bc_papa.getNroParcela()) ) {
MessageDialog.openError(window.getShell(), "Marcar Cruzas", "No se pueden seleccionar las mismas Parcelas.");
window.getShell().setCursor(new Cursor(window.getShell().getDisplay(), SWT.CURSOR_ARROW));
return ;
}
Cruza c = cruzaController.obtenerCruza(anio, bc_mama, bc_papa);
if (c==null) {
c = new Cruza(anio, bc_mama, bc_papa, 0 , 0 );
c.setPrioridad(1);
try {
cruzaController.agregar(c);
} catch (AgrologicException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Grabando Cruza:" + bc_mama.toString() + ":x:" + bc_papa.toString() + " con prioridad 1");
} else {
if (c.getPrioridad()<2) {
System.out.println("Grabando Cruza:" + bc_mama.toString() + ":x:" + bc_papa.toString() + " con prioridad 2");
c.setPrioridad(2);
cruzaController.modificar(c);
} else {
if (c.getPrioridad() == 2) {
//Elimina la Cruza.
try {
cruzaController.eliminar(c);
} catch (AgrologicException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//System.out.println("Grabando Cruza:" + bc_mama.toString() + ":x:" + bc_papa.toString());
//tableCombinadoViewer.refresh();
tableCombinadoViewer.refresh(false);
break;
}
}
window.getShell().setCursor(new Cursor(window.getShell().getDisplay(), SWT.CURSOR_ARROW));
}
});
表查看器的数据是一个数组。
任何想法?