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.