为什么DoubleClickEvent会使用TableViewer.refresh()触发两次?

时间:2014-10-16 16:17:33

标签: java eclipse swt jface

我在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));
        }
    });

表查看器的数据是一个数组。

任何想法?

0 个答案:

没有答案