Hello! I wanted to share this basic that I did and it works for me.
Perhaps they can serve as a base for someone who needs something, and
helps him out of step.

I hope that they can be useful!
Greetings!
Jero.

------------------------------------------------------------------------------------------------------------


import java.util.ArrayList;

import com.google.gwt.cell.client.AbstractCell;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.user.cellview.client.CellList;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.view.client.SingleSelectionModel;

public class DisponibleSeleccionItemWidget extends Composite {

        private HorizontalPanel pnlPrincipal;

        private VerticalPanel pnlBotones;

        private Button btnIzquierda;

        private Button btnTodoIzquierda;

        private Button btnDerecha;

        private Button btnTodoDerecha;

        private int indexSeleccionados = 0;

        private int indexDisponibles = 0;

        private Label lblDisponibles;

        private Label lblSeleccionados;

        final SingleSelectionModel<SelecctionItems> selectionModel = new
SingleSelectionModel<SelecctionItems>();
        // final MultiSelectionModel<SelecctionItems> selectionModel = new
MultiSelectionModel<SelecctionItems>();

        private CellList<SelecctionItems> lstSeleccionados;
        private CellList<SelecctionItems> lstDisponibles;

        private VerticalPanel pnlDisponibles;
        private VerticalPanel pnlSeleccionados;

        private ArrayList<SelecctionItems> lstSeleccionadosModel;
        private ArrayList<SelecctionItems> lstDisponiblesModel;

        public DisponibleSeleccionItemWidget() {
                this.initCustomWidget();
                this.build();
        }

        // Interface que tendrán que implementar los beans que popularan los
datos de este widget.
        public interface SelecctionItems {

                public String getDescripcion();

                public Long getId();

        }

        public class itemlesCell extends AbstractCell<SelecctionItems> {

                @Override
                public void render(SelecctionItems value, Object key,
SafeHtmlBuilder sb) {

                        if (value == null) {
                                return;
                        }
                        sb.appendHtmlConstant("<table>");
                        sb.appendHtmlConstant("<tr><td rowspan='3'>");
                        sb.appendHtmlConstant("<td style='font-size:95%;'>");
                        sb.appendEscaped(value.getDescripcion());
                        sb.appendHtmlConstant("</td></tr></table>");
                }
        }

        private void initCustomWidget() {

                // Instanciamiento
---------------------------------------------------------------------

                this.lstDisponibles = new CellList<SelecctionItems>(new
itemlesCell());
                this.lstSeleccionados = new CellList<SelecctionItems>(new
itemlesCell());

                this.lstDisponiblesModel = new ArrayList<SelecctionItems>();
                this.lstSeleccionadosModel = new ArrayList<SelecctionItems>();

                this.pnlPrincipal = new HorizontalPanel();
                this.pnlBotones = new VerticalPanel();
                this.pnlSeleccionados = new VerticalPanel();
                this.pnlDisponibles = new VerticalPanel();

                this.lblDisponibles = new Label("Disponibles:");
                this.lblSeleccionados = new Label("Seleccionado:");
                this.btnDerecha = new Button(">");
                this.btnIzquierda = new Button("<");
                this.btnTodoDerecha = new Button(">>");
                this.btnTodoIzquierda = new Button("<<");

                // CSS & CONFIG
-------------------------------------------------------------------------

                this.pnlBotones.setSpacing(10);

                this.lstDisponibles.setSelectionModel(selectionModel);
                this.lstSeleccionados.setSelectionModel(selectionModel);

                
this.pnlPrincipal.addStyleName("disponibleSeleccionPrincipalStyle");
                this.pnlBotones.addStyleName("disponibleSeleccionCenterStyle");
                
this.lstDisponibles.addStyleName("disponibleSeleccionListasStyle");
        
this.lstSeleccionados.addStyleName("disponibleSeleccionListasStyle");

                String widthButton = "30px";

                this.btnDerecha.setWidth(widthButton);
                this.btnIzquierda.setWidth(widthButton);
                this.btnTodoDerecha.setWidth(widthButton);
                this.btnTodoIzquierda.setWidth(widthButton);

        }

        public void build() {

                // Ensamble
-----------------------------------------------------------------------------

                this.pnlPrincipal.add(pnlDisponibles);
                this.pnlPrincipal.add(pnlBotones);
                this.pnlPrincipal.add(pnlSeleccionados);

                this.pnlPrincipal.add(lstDisponibles);
                this.pnlPrincipal.add(lstSeleccionados);

                this.pnlDisponibles.add(lblDisponibles);
                this.pnlDisponibles.add(lstDisponibles);

                this.pnlSeleccionados.add(lblSeleccionados);
                this.pnlSeleccionados.add(lstSeleccionados);

                this.pnlBotones.add(this.btnDerecha);
                this.pnlBotones.add(this.btnIzquierda);
                this.pnlBotones.add(this.btnTodoDerecha);
                this.pnlBotones.add(this.btnTodoIzquierda);

                // Listener
------------------------------------------------------------------------------

                this.btnDerecha.addClickHandler(new ClickHandler() {

                        @Override
                        public void onClick(ClickEvent event) {

                                ArrayList<SelecctionItems> itemesSeleccionados =
getItemSeleccionados(lstDisponibles);
                                addSeleccionadosModel(itemesSeleccionados);
                                lstSeleccionados.setRowData(0, 
lstSeleccionadosModel);
                                
lstSeleccionados.setRowCount(lstSeleccionadosModel.size());
                                lstSeleccionados.redraw();

                                indexDisponibles--;
                                indexSeleccionados++;

                                // Quitamos el item seleccionado de la tabla de 
origen
                                
lstDisponiblesModel.removeAll(itemesSeleccionados); // Quitamos
del modelo los seleccionados
                                lstDisponibles.setRowData(0, 
lstDisponiblesModel);
                                
lstDisponibles.setRowCount(lstDisponiblesModel.size());
                                lstDisponibles.redraw();

                        }
                });

                this.btnTodoDerecha.addClickHandler(new ClickHandler() {

                        @Override
                        public void onClick(ClickEvent event) {

                                addSeleccionadosModel(lstDisponiblesModel);
                                lstSeleccionados.setRowData(0, 
lstSeleccionadosModel);
                                
lstSeleccionados.setRowCount(lstSeleccionadosModel.size());
                                lstSeleccionados.redraw();

                                indexDisponibles = 0;
                                indexSeleccionados = lstDisponiblesModel.size();

                                // Quitamos el item seleccionado de la tabla de 
origen
                                lstDisponiblesModel.clear(); // Quitamos del 
modelo los
seleccionados
                                lstDisponibles.setRowCount(0);
                                lstDisponibles.redraw();

                        }
                });
                this.btnTodoIzquierda.addClickHandler(new ClickHandler() {

                        @Override
                        public void onClick(ClickEvent event) {

                                addDisponiblesModel(lstSeleccionadosModel);
                                lstDisponibles.setRowData(0, 
lstDisponiblesModel);
                                
lstDisponibles.setRowCount(lstDisponiblesModel.size());
                                lstDisponibles.redraw();

                                indexSeleccionados = 0;
                                indexDisponibles = lstSeleccionadosModel.size();

                                // Quitamos el item seleccionado de la tabla de 
origen
                                lstSeleccionadosModel.clear(); // Quitamos del 
modelo los
seleccionados
                                lstSeleccionados.setRowCount(0);
                                lstSeleccionados.redraw();

                        }
                });

                this.btnIzquierda.addClickHandler(new ClickHandler() {

                        @Override
                        public void onClick(ClickEvent event) {

                                ArrayList<SelecctionItems> itemesSeleccionados =
getItemSeleccionados(lstSeleccionados);

                                addDisponiblesModel(itemesSeleccionados);
                                lstDisponibles.setRowData(0, 
lstDisponiblesModel);
                                
lstDisponibles.setRowCount(lstDisponiblesModel.size());
                                lstDisponibles.redraw();

                                indexDisponibles++;
                                indexSeleccionados--;

                                // Quitamos el item seleccionado de la tabla de 
origen
                                
lstSeleccionadosModel.removeAll(itemesSeleccionados); // Quitamos
del modelo los seleccionados
                                lstSeleccionados.setRowData(0, 
lstSeleccionadosModel);
                                
lstSeleccionados.setRowCount(lstSeleccionadosModel.size());
                                lstSeleccionados.redraw();
                        }
                });

                initWidget(pnlPrincipal);
        }

        public ArrayList<SelecctionItems> wrapperList(SelecctionItems
SelecctionItems) {
                ArrayList<SelecctionItems> list = new 
ArrayList<SelecctionItems>();
                list.add(SelecctionItems);
                return list;
        }

        public void addListaDisponibles(ArrayList<SelecctionItems>
usuariositemBean) {
                if (usuariositemBean == null || usuariositemBean.size() == 0)
                        return;

                for (SelecctionItems SelecctionItems : usuariositemBean) {
                        this.lstDisponibles.setRowData(indexDisponibles++,
this.wrapperList(SelecctionItems));
                }
                this.addDisponiblesModel(usuariositemBean);
        }

        public void addSeleccionados(SelecctionItems usuariositemBean) {
                addListaSeleccionados(wrapperList(usuariositemBean));
        }

        public void addDisponibles(SelecctionItems itemSelec) {
                addListaDisponibles(wrapperList(itemSelec));
        }

        public void addListaSeleccionados(ArrayList<SelecctionItems>
selecctionsItems) {
                if (selecctionsItems == null || selecctionsItems.size() == 0)
                        return;

                for (SelecctionItems SelecctionItems : selecctionsItems) {
                        this.lstSeleccionados.setRowData(indexSeleccionados++,
this.wrapperList(SelecctionItems));
                }

                this.addSeleccionadosModel(selecctionsItems);
        }

        private ArrayList<SelecctionItems>
getItemSeleccionados(CellList<SelecctionItems> cellList) {

                ArrayList<SelecctionItems> itemesSeleccionados = new
ArrayList<SelecctionItems>();

                for (int i = 0; i < cellList.getDisplayedItems().size(); i++) {

                        SelecctionItems item = 
cellList.getDisplayedItems().get(i);
                        if (cellList.getSelectionModel().isSelected(item)) {
                                itemesSeleccionados.add(item);
                        }
                }
                return itemesSeleccionados;
        }

        private void addSeleccionadosModel(ArrayList<SelecctionItems>
usuariositemBean) {
                for (SelecctionItems SelecctionItems : usuariositemBean) {
                        lstSeleccionadosModel.add(SelecctionItems);
                }
        }

        private void addDisponiblesModel(ArrayList<SelecctionItems>
usuariositemBean) {
                for (SelecctionItems SelecctionItems : usuariositemBean) {
                        lstDisponiblesModel.add(SelecctionItems);
                }
        }

        public ArrayList<SelecctionItems> getLstSeleccionadosModel() {
                return lstSeleccionadosModel;
        }

        public ArrayList<SelecctionItems> getLstDisponiblesModel() {
                return lstDisponiblesModel;
        }

        // Obtenemos los items seleccionados de cualquiera de las dos listas.
        private ArrayList<SelecctionItems> getItemListaDisponiblesSelected()
{
                return this.getItemSeleccionados(this.lstDisponibles);
        }

        private ArrayList<SelecctionItems>
getItemListaSeleccionadosSelected() {
                return this.getItemSeleccionados(this.lstSeleccionados);
        }
}

-------------------------------------------------------------------------------------------------------
CSS Style
--------------------------------------------------------------------------------------------------------

.disponibleSeleccionListasStyle {
    background-color: beige;
    height: 225px;
    width: 200px;
}
.disponibleSeleccionPrincipalStyle {
   background-color: Silver;
    height: 225px;
    border-style: dotted;
    border-width: 1px;
}
.disponibleSeleccionCenterStyle {
    margin-top: 90%;
}

-- 
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to google-web-tool...@googlegroups.com.
To unsubscribe from this group, send email to 
google-web-toolkit+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

Reply via email to