package core; import java.util.ArrayList; import java.util.List; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; import org.zkoss.zk.ui.util.GenericForwardComposer; import org.zkoss.zul.Cell; import org.zkoss.zul.Column; import org.zkoss.zul.Foot; import org.zkoss.zul.Footer; import org.zkoss.zul.Grid; import org.zkoss.zul.Label; import org.zkoss.zul.ListModelList; import org.zkoss.zul.Row; import org.zkoss.zul.RowRenderer; import com.sun.corba.se.pept.transport.EventHandler; public class Test extends GenericForwardComposer { private static final long serialVersionUID = -1L; private static final int ROWS = 10; private static final int COLS = 60; private Grid grid; private ListModelList prodModel; public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); List objts = new ArrayList(); for (int i = 0; i < ROWS; i++) { O o = new O(); ArrayList l = new ArrayList(); for (int j = 0; j < COLS; j++) { l.add("Row " + i + " Col " + j); } o.setList(l); objts.add(o); } prodModel = new ListModelList(objts); for (int i = 0; i < COLS; i++) { Column c = new Column("Col " + i); c.setWidth("90px"); c.setParent(grid.getColumns()); } for (int i = 0; i < COLS; i++) { Footer footer = new Footer("Footer " + i); footer.setParent(grid.getFoot()); } grid.setRowRenderer(new Row_renderer()); grid.setModel(prodModel); } } class Row_renderer implements RowRenderer { @Override public void render(Row row, Object data) throws Exception { final O objt = (O) data; for (String s : objt.getList()) { Cell c = new Cell(); new Label(s).setParent(c); c.setWidgetAttribute("COL", ((Integer) objt.getList().indexOf(s)).toString()); c.setWidgetAttribute("ROW", ((Integer) row.getParent().getChildren().indexOf(row)).toString()); c.addEventListener(Events.ON_CLICK, new ClickHandler()); c.setParent(row); } } } class ClickHandler implements EventListener { @Override public void onEvent(Event event) throws Exception { Integer col = Integer.parseInt(event.getTarget().getWidgetAttribute("COL")); Integer row = Integer.parseInt(event.getTarget().getWidgetAttribute("ROW")); Grid grid = (Grid) event.getTarget().getRoot().getFellowIfAny("grid"); ListModelList lm = (ListModelList) grid.getModel(); ((O) lm.get(row)).getList().set(col, "Modified"); grid.setModel(lm); } } class O { private List list; public List getList() { return list; } public void setList(List list) { this.list = list; } }