在项目的开发过程中,有些布局是固定的,为了布局的统一,通常会制定一定的模版,每个页面都继承这个模版,这样所有程序的实现都很固定,而且写法都大同小异,从而大大提高了代码的复用率。
1、定义模版的各个类
/** * * @功能:模版主类,做布局之用 * @创建人 gao_jie * @创建日期 Mar 3, 2009 * @版本 1.0 * */ public abstract class WindowTemplet extends Borderlayout implements AfterCompose { /** * 上面框架 */ private Div m_mainCenterNorthDiv; /** * ZK框架对象 */ private LayoutRegion borderlayout_navigate; /** * 中心布局 */ private LayoutRegion main_center; /** * 子窗口集合 */ private List<ChildWindow> divs = new ArrayList<ChildWindow>(); /* * (非 Javadoc) * * @see org.zkoss.zk.ui.ext.AfterCompose#afterCompose() */ public void afterCompose() { this.createMainBorderLayout(); this.getBorderlayout_navigate().appendChild( this.createNavigateComponent()); this.doWindowTempletInit(); } /** * 窗体返回操作 */ abstract protected void onReturn(); /** * 初始化 */ abstract protected void doWindowTempletInit(); /** * 调用各子窗口处理过程 * * @param command */ protected void processCommand(ConsoleCommand command) { for (Object child : divs) { try { ((ChildWindow) child).processCommand(command); } catch (Exception e) { e.getMessage(); } } } /** * 创建主体框架 */ private void createMainBorderLayout() { LayoutRegion main_north = this.createLayoutRegion("north", null, "none", true, false); main_center = this.createLayoutRegion("center", null, "none", true, true); this.appendChild(main_north); this.appendChild(main_center); this.setBorderlayout_navigate(main_north); } /** * 创建一个LayoutRegion * * @param name * @param size * @param border * @param flex * @param autoscroll * @return */ private LayoutRegion createLayoutRegion(String name, String size, String border, Boolean flex, Boolean autoscroll) { LayoutRegion region = null; try { if ("north".equals(name)) region = (LayoutRegion) Class.forName( "org.zkoss.zkex.zul.North").newInstance(); if ("south".equals(name)) region = (LayoutRegion) Class.forName( "org.zkoss.zkex.zul.South").newInstance(); if ("west".equals(name)) region = (LayoutRegion) Class .forName("org.zkoss.zkex.zul.West").newInstance(); if ("east".equals(name)) region = (LayoutRegion) Class .forName("org.zkoss.zkex.zul.East").newInstance(); if ("center".equals(name)) region = (LayoutRegion) Class.forName( "org.zkoss.zkex.zul.Center").newInstance(); } catch (Exception e) { e.getMessage(); } if (null != size) region.setSize(size); if (null != border) region.setBorder(border); if (null != flex) region.setFlex(flex); if (null != autoscroll) region.setAutoscroll(autoscroll); region.setStyle("background-color:#F5F6CC"); return region; } /** * 创建容器 * * @param url * @param position */ protected Include createContainer(String url) { Include include = new Include(); include.setSrc(url); main_center.appendChild(include); return include; } /** * 创建标题部分 * * @return */ private Div createNavigateComponent() { Div div = new Div(); Hbox titleHbox = new Hbox(); titleHbox.setSpacing("0"); titleHbox.setWidth("99%"); titleHbox.setHeight("36px"); titleHbox.setStyle("position:relative;top:15px"); Separator separator = new Separator(); separator.setBar(true); div.appendChild(titleHbox); div.appendChild(separator); Hbox headHbox = new Hbox(); headHbox.setStyle("align: left"); Space blank = new Space(); blank.setStyle("color:#F5F6CC; text-align: left"); Label title = new Label(); title.setId("titlelabel"); title.setWidth("30%"); title .setStyle("color: #000000; FONT-FAMILY: Verdana, Helvetica, sans-serif; font-size:12px; text-align: left"); Div backDiv = new Div(); backDiv.setAlign("right"); backDiv.setWidth("90%"); headHbox.appendChild(blank); headHbox.appendChild(title); titleHbox.appendChild(headHbox); titleHbox.appendChild(backDiv); Label back = new Label(); back.setId("backlabel"); back.setValue("返回"); back.setVisible(false); back .setStyle("cursor:hand ;color:blue;background-color:#F5F6CC;font-size:12px;text-decoration:underline"); backDiv.appendChild(back); back.addEventListener("onClick", new EventListener() { public void onEvent(Event arg0) throws Exception { onReturn(); } }); m_mainCenterNorthDiv = new Div(); div.appendChild(m_mainCenterNorthDiv); return div; } private LayoutRegion getBorderlayout_navigate() { return borderlayout_navigate; } private void setBorderlayout_navigate(LayoutRegion borderlayout_navigate) { this.borderlayout_navigate = borderlayout_navigate; } public String getNavigateTitle() { Label label = (Label) this.getFellow("titlelabel"); return label.getValue(); } public void setNavigateTitle(String navigateTitle) { Label label = (Label) this.getFellow("titlelabel"); label.setValue(navigateTitle); } public boolean getShowReturnButton() { Label back = (Label) this.getFellow("backlabel"); return back.isVisible(); } public void setShowReturnButton(boolean showReturnButton, String lable) { Label back = (Label) this.getFellow("backlabel"); back.setVisible(showReturnButton); if (lable != null) { back.setValue(lable); } } protected List<ChildWindow> getDivs() { return divs; } /** * 获取TempletWindow * * @return */ public static WindowTemplet getTempletWindow() { WindowTemplet win = (WindowTemplet) Path .getComponent("//templetwindow/mainwnd"); return win; } }/** * * @功能:子窗体类 * @创建人 gao_jie * @创建日期 Mar 3, 2009 * @版本 1.0 * */ public abstract class ChildWindow extends Window { private static final long serialVersionUID = 1L; /** * 构造函数 */ @SuppressWarnings("unchecked") public ChildWindow() { WindowTemplet templet = getParentWindow(); if (templet != null) templet.getDivs().add(this); } // 获取父窗口 protected WindowTemplet getParentWindow() { return WindowTemplet.getTempletWindow(); } // 处理命令过程 abstract protected void processCommand(ConsoleCommand command); // 发送命令到主窗口 protected void sendCommand(ConsoleCommand command) { WindowTemplet templet = getParentWindow(); if (templet != null) templet.processCommand(command); } }
/** * * @功能 初始化命令 * @创建人 gao_jie * @创建日期 Mar 3, 2009 * @版本 1.0 * */ public class InitCommand extends ConsoleCommand { /** * 构造函数 */ public InitCommand() { super("Init"); } }
/** * * @功能 控制命令 * @创建人 gao_jie * @创建日期 Mar 3, 2009 * @版本 1.0 * */ public class ConsoleCommand { private String name; private Object[] paras; public ConsoleCommand() { this("", new Object[] {}); } public ConsoleCommand(String name) { this(name, new Object[] {}); } public ConsoleCommand(String name, Object[] paras) { this.name = name; this.paras = paras; } // 命令名称 public String getName() { return name; } public void setName(String name) { this.name = name; } // 命令参数 public Object[] getParas() { return paras; } public void setParas(Object[] paras) { this.paras = paras; } public boolean equals(Object obj) { if (obj instanceof ConsoleCommand) { return ((ConsoleCommand) obj).getName().equalsIgnoreCase(name); } return false; } }
2、应用模版
相关资源:敏捷开发V1.0.pptx
