Processing...

Suggested case list:

Using timer to refresh a grid

383guest172.69.33.12125nk0uiMay 7, 2020 7:23:47 AMlink

user model to move item to another listbox

120guest162.158.193.148d0n3krApr 2, 2020 5:28:28 AMlink

Disabled list item row passed to VM-1981

296fatih123160.83.36.13025nk0uiFeb 13, 2018 4:25:44 PMlink

Disabled list item row passed to VM-1981

295fatih123160.83.36.13025nk0uiFeb 13, 2018 4:25:16 PMlink

Disabled list item row passed to VM-1981

294fatih123160.83.36.13225nk0uiFeb 13, 2018 3:30:44 PMlink

grid sample with ListModel/RowRenderer

816guest80.82.2.1312vah9ajFeb 21, 2017 11:42:21 AMlink

grid sample with ListModel/RowRenderer

809guest175.98.113.1622vah9ajJan 26, 2017 9:19:33 AMlink

grid sample with ListModel/RowRenderer

196guest79.185.142.402vah9ajApr 26, 2014 10:53:57 PMlink

grid sample with ListModel/RowRenderer

195guest79.185.142.402vah9ajApr 26, 2014 10:53:54 PMlink

grid sample with ListModel/RowRenderer

194guest79.185.142.402vah9ajApr 26, 2014 10:53:51 PMlink

grid sample with ListModel/RowRenderer

193guest79.185.142.402vah9ajApr 26, 2014 10:53:48 PMlink

grid sample with ListModel/RowRenderer

192guest79.185.142.402vah9ajApr 26, 2014 10:53:44 PMlink

grid sample with ListModel/RowRenderer

191guest79.185.142.402vah9ajApr 26, 2014 10:53:40 PMlink

Hierarchy table without using ZK PE/EE

1aaknai151.28.135.2131s871daJul 29, 2013 11:02:46 PMlink

grid sample with ListModel/RowRenderer

128aaknai151.28.135.2132vah9ajJul 29, 2013 7:20:00 PMlink

user model to move item to another listbox

1TonyQ114.25.109.94d0n3krApr 21, 2012 10:43:27 AMlink

Using timer to refresh a grid

1TonyQ220.133.44.3725nk0uiFeb 17, 2012 3:17:34 AMlink

Fire a event from child iframe

1TonyQ220.133.44.372eupjotFeb 3, 2012 5:04:52 AMlink

Textbox input restriction sample

1TonyQ72.21.245.2431b3nlr0Dec 20, 2011 10:09:10 AMlink

Test web core taglib in ZUL

1TonyQ198.203.175.175ofqkemDec 17, 2011 3:36:08 AMlink

Latest 10 Fiddles :

Object hashcode different with ZK form binding

2YannUnil172.69.108.13540rj0kApr 19, 2024 1:18:08 PMlink

Object hashcode different with ZK form binding

1YannUnil172.69.108.13040rj0kApr 19, 2024 1:04:31 PMlink

font awesome effects

1guest172.71.166.21232nla3hApr 18, 2024 6:04:43 PMlink

font awesome effects

245guest172.71.166.21220t2jmoApr 18, 2024 6:04:41 PMlink

ZK-5696

1JamesChu162.158.187.3739iuvhmApr 18, 2024 10:33:52 AMlink

Listbox colspan header version 2

3guest172.71.183.199jkpp6qApr 17, 2024 1:54:19 PMlink

ZK-5695

1guest162.158.90.1402is2rctApr 17, 2024 10:23:20 AMlink

LocalDate in datebox

2guest172.70.243.516v49n7Apr 17, 2024 6:05:17 AMlink

LocalDate in datebox

1guest172.70.243.516v49n7Apr 17, 2024 6:04:18 AMlink

LocalDate in datebox

1guest172.70.243.511m6i0gcApr 17, 2024 6:04:04 AMlink

Mnemonic, underline, Keystroke

1guest220.135.202.140r5v470May 27, 2013 12:39:14 PMlink

resources

index.zulzul<zk xmlns:w="client"> <style> .z-menubar-mnemonic-active .z-menu-btn:first-letter, .z-menubar-mnemonic-active .z-menuitem-btn:first-letter { text-decoration: underline; } </style> <div id="div" apply="pkg$.TestComposer" hflex="1" vflex="1" style="border: 1px solid #ccc;"> <listbox id="lbx" ctrlKeys="@a@b@z@d@h"> <listitem> <listcell height="500px" style="vertical-align: top;"> <menubar id="menubar" use="pkg$.KeystrokeEnhancedMenubar"> <menu label="Document"> <menupopup use="pkg$.KeystrokeEnhancedMenupopup"> <menuitem label="New" onClick="" /> <menuitem label="Open" onClick="" /> <menuitem label="Save" onClick="" /> <menuseparator /> <menuitem label="Exit" onClick="" /> </menupopup> </menu> <menu label="Help"> <menupopup use="pkg$.KeystrokeEnhancedMenupopup"> <menuitem label="Index" onClick="" /> <menu label="About"> <menupopup use="pkg$.KeystrokeEnhancedMenupopup"> <menuitem label="About ZK" onClick="" /> <menuitem label="About Potix" onClick="" /> </menupopup> </menu> </menupopup> </menu> <menuitem label="ZK" onClick='alert("ZK");' /> </menubar> </listcell> </listitem> </listbox> </div> </zk>TestComposer.javajavaimport org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.event.KeyEvent; import org.zkoss.zk.ui.select.SelectorComposer; import org.zkoss.zk.ui.select.annotation.Listen; import org.zkoss.zk.ui.select.annotation.Wire; import org.zkoss.zul.Listbox; @SuppressWarnings("rawtypes") public class TestComposer extends SelectorComposer { /** * */ private static final long serialVersionUID = 5162897369552579175L; @Wire KeystrokeEnhancedMenubar menubar; @Wire Listbox lbx; Component focusedItem; @SuppressWarnings("unchecked") public void doAfterCompose (Component comp) throws Exception { super.doAfterCompose(comp); lbx.setCtrlKeys(menubar.getCtrlKeysString()); } @Listen ("onCtrlKey = #lbx") public void focusMenuAccordingly (KeyEvent event) { String mbCtrlKeys = menubar.getCtrlKeysString(); String key = Character.toString ((char) event.getKeyCode()).toLowerCase(); String ck = event.isCtrlKey()? "^" : event.isAltKey()? "@" : event.isShiftKey()? "$" : ""; ck += key; if (mbCtrlKeys != null && mbCtrlKeys.contains(ck)) { menubar.focusItem(key); } } }KeystrokeEnhancedMenubar.javajavaimport java.util.HashMap; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.event.Events; import org.zkoss.zul.Menu; import org.zkoss.zul.Menubar; import org.zkoss.zul.Menuitem; public class KeystrokeEnhancedMenubar extends Menubar { private static final long serialVersionUID = -8294549031526117978L; private static HashMap<Integer, String> _ctrlKeyMap = new HashMap<Integer, String>(); private Component _focusedItem; public KeystrokeEnhancedMenubar () { setWidgetOverride("setMnemonicClass", "function (v) {\n" +" if (v)\n" +" jq(this.$n()).addClass('z-menubar-mnemonic-active');\n" +" else\n" +" jq(this.$n()).removeClass('z-menubar-mnemonic-active');\n" +" }\n" ); } static { initCtrlKeyMap (); } public String getCtrlKeysString () { StringBuilder sb = new StringBuilder(); for (Component c : getChildren()) { appendCtrlKeyString(c, sb); } return sb.toString(); } public void focusItem (String key) { Component first = null; Component next = null; boolean foundCurrent = false; for (Component c : getChildren()) { String label = (c instanceof Menu)? ((Menu)c).getLabel().toLowerCase() : ((Menuitem)c).getLabel().toLowerCase(); System.out.println(label); if (!foundCurrent && c.equals(_focusedItem)) { foundCurrent = true; } else if (!foundCurrent && first == null && label.startsWith(key)) { first = c; } else if (foundCurrent && next == null && label.startsWith(key)) { next = c; } } System.out.println(first); System.out.println(next); _focusedItem = (next != null)? next : (first != null)? first : _focusedItem; System.out.println("_focusedItem is " + _focusedItem); if (_focusedItem instanceof Menu) { ((Menu) _focusedItem).open(); } else { System.out.println(" do focus menuitem"); Events.postEvent("onClick", _focusedItem, null); } } private void appendCtrlKeyString (Component c, StringBuilder sb) { if (c instanceof Menu) { appendCtrlKeyString((Menu)c, sb); } else if (c instanceof Menuitem) { appendCtrlKeyString((Menuitem)c, sb); } } private void appendCtrlKeyString (Menu m, StringBuilder sb) { sb.append("@").append(m.getLabel().substring(0, 1).toLowerCase()); } private void appendCtrlKeyString (Menuitem mi, StringBuilder sb) { sb.append("@").append(mi.getLabel().substring(0, 1).toLowerCase()); } private static void initCtrlKeyMap () { for (int i = 65; i <= 90; i++) { _ctrlKeyMap.put(new Integer(i), Character.toString ((char) i)); } } } KeystrokeEnhancedMenupopup.javajavaimport org.zkoss.zul.Menupopup; public class KeystrokeEnhancedMenupopup extends Menupopup { private static final long serialVersionUID = 3011317593732259762L; public KeystrokeEnhancedMenupopup () { setWidgetOverride("open", "function (ref, offset, position, opts) {\n" +" this.$open(ref, offset, position, opts);\n" +" var parent = this.parent? this.parent.parent : null;\n" +" if (parent && parent.$instanceof(zul.menu.Menubar))\n" +" parent.setMnemonicClass(true);\n" +" }\n" ); setWidgetOverride("close", "function () {\n" +" this.$close();\n" +" var parent = this.parent? this.parent.parent : null;\n" +" if (parent && parent.$instanceof(zul.menu.Menubar)) {\n" +" var menu = this.parent;\n" +" menu.$class._rmActive(menu);\n" +" setTimeout(function () {\n" +" menu.$class._rmActive(menu);\n" +" if (!jq(parent.$n()).find('.z-menu-body-seld')[0]\n" +" && !jq(parent.$n()).find('.z-menu-body-over')[0])\n" +" parent.setMnemonicClass(false);\n" +" }, 0);\n" +" }\n" +" }\n" ); setWidgetOverride("doKeyDown_", "function (evt) {\n" +" var keyCode = evt.keyCode;\n" +" if (keyCode >= 65 && keyCode <= 90) {\n" +" if (evt.altKey)\n" +" this.navigateTopMenu_(keyCode);\n" +" else\n" +" this.navigateItem_(keyCode);\n" +" }\n" +" this.$doKeyDown_(evt);\n" +" }\n" ); setWidgetOverride("navigateTopMenu_", "function (keyCode) {\n" +" var char = String.fromCharCode(keyCode).toLowerCase(),\n" +" root = this._getRootMenu(this),\n" +" previous = root._getPrevVisibleMenu(),\n" +" next = root._getNextVisibleMenu(),\n" +" arr = [],\n" +" label;\n" +" while (next) {\n" +" label = next._label;\n" +" if (label && label.toLowerCase().indexOf(char) == 0)\n" +" break;\n" +" next = next._getNextVisibleMenu();\n" +" if (arr.indexOf(next) >= 0) {\n" +" next = null;\n" +" break;\n" +" }\n" +" arr.push(next);\n" +" }\n" +" if (next) {\n" +" this._activateNextMenu(next);\n" +" return;\n" +" }\n" +" while (previous) {\n" +" label = previous._label;\n" +" if (label && label.toLowerCase().indexOf(char) == 0)\n" +" break;\n" +" previous = previous._getPrevVisibleMenu();\n" +" if (arr.indexOf(previous) >= 0) {\n" +" previous = null;\n" +" break;\n" +" }\n" +" arr.push(previous);\n" +" }\n" +" if (previous)\n" +" this._activateNextMenu(previous);\n" +" }\n" ); setWidgetOverride("navigateItem_", "function (keyCode) {\n" +" var char = String.fromCharCode(keyCode).toLowerCase(),\n" +" focused = this._currentChild(),\n" +" tmp = this.firstChild,\n" +" label,\n" +" idx = -1,\n" +" fidx,\n" +" cidx,\n" +" nidx,\n" +" foundFocused,\n" +" first,\n" +" next;\n" +" while(tmp) {\n" +" if (tmp.isVisible() && (tmp.$instanceof(zul.menu.Menu) || (tmp.$instanceof(zul.menu.Menuitem) && !tmp.isDisabled())))\n" +" idx++;\n" +" label = tmp._label;\n" +" if (!label) {\n" +" tmp = tmp.nextSibling;\n" +" continue;\n" +" }\n" +" if (!foundFocused && tmp == focused) {\n" +" foundFocused = true;\n" +" cidx = idx;\n" +" } else if (!foundFocused && !first && label && label.toLowerCase().indexOf(char) == 0) {\n" +" first = tmp;\n" +" fidx = idx;\n" +" } else if (foundFocused && !next && label && label.toLowerCase().indexOf(char) == 0) {\n" +" next = tmp;\n" +" nidx = idx;\n" +" }\n" +" tmp = tmp.nextSibling;\n" +" }\n" +" if (focused)\n" +" focused.$class._rmActive(focused);\n" +" this._curIndex = next? nidx : first? fidx : cidx;\n" +" focused = next? next : first? first : focused;\n" +" if (focused)\n" +" focused.$class._addActive(focused);\n" +" if (focused && focused.$instanceof(zul.menu.Menu))\n" +" this._toggleMenu(focused);\n" +" }\n" ); setWidgetOverride("_currentChild", "function () {\n" +" var index = this._curIndex;\n" +" if (index >= 0)\n" +" for (var w = this.firstChild, k = 0; w; w = w.nextSibling)\n" +" if ((w.isVisible() && (w.$instanceof(zul.menu.Menu) || (w.$instanceof(zul.menu.Menuitem) && !w.isDisabled())))\n" +" && k++ == index)\n" +" return w;\n" +" }\n" ); setWidgetOverride("_toggleMenu", "function (w) {\n" +" var pp;\n" +" if ((pp = w.menupopup)) {\n" +" if (pp.isOpen())\n" +" pp.close();\n" +" else\n" +" pp.open();\n" +" } else if ((pp = w._contentHandler)) {\n" +" if (pp.isOpen())\n" +" pp.onHide();\n" +" else\n" +" pp.onShow();\n" +" }\n" +" }\n" ); setWidgetOverride("_getRootMenu", "function (wgt) {\n" +" for (var w = wgt; w && (w = this._getMenu(w)); w = w.parent) {\n" +" if (w.isTopmost())\n" +" return w;\n" +" }\n" +" return null;\n" +" }\n" ); setWidgetOverride("_getMenu", "function (wgt) {\n" +" var p = wgt.parent;\n" +" return p.$instanceof(zul.menu.Menu) ? p: null;\n" +" }\n" ); setWidgetOverride("_activateNextMenu", "function (menu) {\n" +" var pp = menu.menupopup;\n" +" if (pp) {\n" +" pp._shallClose = false;\n" +" if (!pp.isOpen()) pp.open();\n" +" }\n" +" menu.$class._addActive(menu);\n" +" zWatch.fire('onFloatUp', menu); //notify all\n" +" }\n" ); } }