⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 listbox.java

📁 ZK 基础介绍 功能操作 模块 结合数据库操作
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
				log.warning("Conflict event: number of removed items not matched: "+event);				break; //handle it as CONTENTS_CHANGED			}			//detach and remove			for (Iterator it = getItems().listIterator(min);			--cnt >= 0 && it.hasNext();) {				it.next();				it.remove();			}			done = true;			break;		}		if (!done) //CONTENTS_CHANGED			syncModel(min, max);		postOnInitRender();			//Bug 1823236: though fixed in JS, it improves performance			//to save one roundtrip	}	private static final ListitemRenderer getDefaultItemRenderer() {		return _defRend;	}	private static final ListitemRenderer _defRend = new ListitemRenderer() {		public void render(Listitem item, Object data) {			item.setLabel(Objects.toString(data));			item.setValue(data);		}	};	/** Returns the renderer used to render items.	 */	private ListitemRenderer getRealRenderer() {		return _renderer != null ? _renderer: getDefaultItemRenderer();	}	/** Used to render listitem if _model is specified. */	private class Renderer implements java.io.Serializable {		private final ListitemRenderer _renderer;		private boolean _rendered, _ctrled;		private Renderer() {			_renderer = getRealRenderer();		}		private void render(Listitem item) throws Throwable {			if (item.isLoaded())				return; //nothing to do			if (!_rendered && (_renderer instanceof RendererCtrl)) {				((RendererCtrl)_renderer).doTry();				_ctrled = true;			}			final Listcell cell = (Listcell)item.getFirstChild();			if (!(_renderer instanceof ListitemRendererExt)			|| (((ListitemRendererExt)_renderer).getControls() & 				ListitemRendererExt.DETACH_ON_RENDER) != 0) { //detach (default)				cell.detach();			}			try {				_renderer.render(item, _model.getElementAt(item.getIndex()));			} catch (Throwable ex) {				try {					item.setLabel(Exceptions.getMessage(ex));				} catch (Throwable t) {					log.error(t);				}				item.setLoaded(true);				throw ex;			} finally {				if (item.getChildren().isEmpty())					cell.setParent(item);			}			item.setLoaded(true);			_rendered = true;		}		private void doCatch(Throwable ex) {			if (_ctrled) {				try {					((RendererCtrl)_renderer).doCatch(ex);				} catch (Throwable t) {					throw UiException.Aide.wrap(t);				}			} else {				throw UiException.Aide.wrap(ex);			}		}		private void doFinally() {			if (_ctrled)				((RendererCtrl)_renderer).doFinally();		}	}	/** Renders the specified {@link Listitem} if not loaded yet,	 * with {@link #getItemRenderer}.	 *	 * <p>It does nothing if {@link #getModel} returns null.	 * In other words, it is meaningful only if live data model is used.	 *	 * @see #renderItems	 * @see #renderAll	 * @return the list item being passed to this method	 */	public Listitem renderItem(Listitem li) {		if (_model != null && !li.isLoaded()) {			final Renderer renderer = new Renderer();			try {				renderer.render(li);			} catch (Throwable ex) {				renderer.doCatch(ex);			} finally {				renderer.doFinally();			}		}		return li;	}	/** Renders all {@link Listitem} if not loaded yet,	 * with {@link #getItemRenderer}.	 *	 * @see #renderItem	 * @see #renderItems	 */	public void renderAll() {		if (_model == null) return;		final Renderer renderer = new Renderer();		try {			for (Iterator it = getItems().iterator(); it.hasNext();)				renderer.render((Listitem)it.next());		} catch (Throwable ex) {			renderer.doCatch(ex);		} finally {			renderer.doFinally();		}	}	public void renderItems(Set items) {		if (_model == null) return;		if (items.isEmpty())			return; //nothing to do		final Renderer renderer = new Renderer();		try {			for (Iterator it = items.iterator(); it.hasNext();)				renderer.render((Listitem)it.next());		} catch (Throwable ex) {			renderer.doCatch(ex);		} finally {			renderer.doFinally();		}	}	//-- super --//	public void setMold(String mold) {		final String old = getMold();		if (!Objects.equals(old, mold)) {			super.setMold(mold);			if ("paging".equals(old)) { //change from paging				if (_paging != null) {					removePagingListener(_paging);					_paging.detach();				} else if (_pgi != null) {					removePagingListener(_pgi);				}			} else if (inPagingMold()) { //change to paging				if (_pgi != null) addPagingListener(_pgi);				else newInternalPaging();			}		}	}		public String getOuterAttrs() {		final StringBuffer sb =			new StringBuffer(80).append(super.getOuterAttrs());		if (inSelectMold()) {			HTMLs.appendAttribute(sb, "name", _name);			HTMLs.appendAttribute(sb, "size",  getRows());			if (isMultiple())				HTMLs.appendAttribute(sb, "multiple",  "multiple");			if (_disabled)				HTMLs.appendAttribute(sb, "disabled",  "disabled");			if (_tabindex >= 0)				HTMLs.appendAttribute(sb, "tabindex", _tabindex);		} else {			HTMLs.appendAttribute(sb, "z.name", _name);			HTMLs.appendAttribute(sb, "z.size",  _rows);			if (_disabled)				HTMLs.appendAttribute(sb, "z.disabled",  true);			if (_multiple)				HTMLs.appendAttribute(sb, "z.multiple", true);			HTMLs.appendAttribute(sb, "z.selId", getSelectedId());			//if (_checkmark)			//	HTMLs.appendAttribute(sb, "z.checkmark",  true);			if (_vflex)				HTMLs.appendAttribute(sb, "z.vflex", true);			if (_model != null)				HTMLs.appendAttribute(sb, "z.model", true);			if (_scOddRow != null)				HTMLs.appendAttribute(sb, "z.scOddRow", _scOddRow);		}		appendAsapAttr(sb, Events.ON_SELECT);		return sb.toString();	}	private class ItemIter implements ListIterator, java.io.Serializable {		private ListIterator _it;		private int _j;		private boolean _bNxt;		private ItemIter(int index) {			_j = index;		}		public void add(Object o) {			prepare();			_it.add(o);			++_j;		}		public boolean hasNext() {			return _j < _items.size();		}		public boolean hasPrevious() {			return _j > 0;		}		public Object next() {			if (!hasNext())				throw new NoSuchElementException();			prepare();			final Object o = _it.next();			++_j;			_bNxt = true;			return o;		}		public Object previous() {			if (!hasPrevious())				throw new NoSuchElementException();			prepare();			final Object o = _it.previous();			--_j;			_bNxt = false;			return o;		}		public int nextIndex() {			return _j;		}		public int previousIndex() {			return _j - 1;		}		public void remove() {			if (_it == null) throw new IllegalStateException();			_it.remove();			if (_bNxt) --_j;		}		public void set(Object o) {			if (_it == null) throw new IllegalStateException();			_it.set(o);		}		private void prepare() {			if (_it == null)				_it = getChildren().listIterator(_j + _hdcnt);		}	}	//Cloneable//	public Object clone() {		final Listbox clone = (Listbox)super.clone();		clone.init();		clone.afterUnmarshal();		if (clone._model != null) {			//we use the same data model but we have to create a new listener			clone._dataListener = null;			clone.initDataListener();		}		return clone;	}	private void afterUnmarshal() {		int index = 0;		for (Iterator it = getChildren().iterator(); it.hasNext();) {			final Object child = it.next();			if (child instanceof Listitem) {				final Listitem li = (Listitem)child;				li.setIndexDirectly(index ++); //since Listitem.clone() resets index				if (li.isSelected()) {					_selItems.add(li);				}			} else if (child instanceof Listhead) {				_listhead = (Listhead)child;			} else if (child instanceof Listfoot) {				_listfoot = (Listfoot)child;			} else if (child instanceof Paging) {				_pgi = _paging = (Paging)child;			}		}	}	//-- Serializable --//	private synchronized void readObject(java.io.ObjectInputStream s)	throws java.io.IOException, ClassNotFoundException {		s.defaultReadObject();		init();		afterUnmarshal();		//TODO: how to marshal _pgi if _pgi != _paging		//TODO: re-register event listener for onPaging		if (_model != null) initDataListener();	}	//-- ComponentCtrl --//	protected Object newExtraCtrl() {		return new ExtraCtrl();	}	/** A utility class to implement {@link #getExtraCtrl}.	 * It is used only by component developers.	 */	protected class ExtraCtrl extends XulElement.ExtraCtrl	implements InnerWidth, Selectable, Cropper, RenderOnDemand {		//InnerWidth//		public void setInnerWidthByClient(String width) {			_innerWidth = width == null ? "100%": width;		}		//RenderOnDemand//		public void renderItems(Set items) {			int cnt = items.size();			if (cnt == 0)				return; //nothing to do			cnt = 20 - cnt;			if (cnt > 0 && _preloadsz > 0) { //Feature 1740072: pre-load				if (cnt > _preloadsz) cnt = _preloadsz; //at most 8 more to load				//1. locate the first item found in items				final List toload = new LinkedList();				Iterator it = _items.iterator();				while (it.hasNext()) {					final Listitem li = (Listitem)it.next();					if (items.contains(li)) //found						break;					if (!li.isLoaded())						toload.add(0, li); //reverse order				}				//2. add unload items before the found one				if (!toload.isEmpty()) {					int bfcnt = cnt/3;					for (Iterator e = toload.iterator();					bfcnt > 0 && e.hasNext(); --bfcnt, --cnt) {						items.add(e.next());					}				}				//3. add unloaded after the found one				while (cnt > 0 && it.hasNext()) {					final Listitem li = (Listitem)it.next();					if (!li.isLoaded() && items.add(li))						--cnt;				}			}			Listbox.this.renderItems(items);		}		//--Cropper--//		public boolean isCropper() {			return inPagingMold();		}		public Set getAvailableAtClient() {			if (!inPagingMold())				return null;			final Set avail = new HashSet(37);			avail.addAll(_heads);			if (_listfoot != null) avail.add(_listfoot);			if (_paging != null) avail.add(_paging);				final Paginal pgi = getPaginal();			int pgsz = pgi.getPageSize();			final int ofs = pgi.getActivePage() * pgsz;			for (final Iterator it = getItems().listIterator(ofs);			--pgsz >= 0 && it.hasNext();)				avail.add(it.next());			return avail;		}		//-- Selectable --//		public void selectItemsByClient(Set selItems) {			_noSmartUpdate = true;			try {				final boolean paging = inPagingMold();				if (!_multiple				|| (!paging && (selItems == null || selItems.size() <= 1))) {					final Listitem item =						selItems != null && selItems.size() > 0 ?							(Listitem)selItems.iterator().next(): null;					selectItem(item);				} else {					int from, to;					if (paging) {						final Paginal pgi = getPaginal();						int pgsz = pgi.getPageSize();						from = pgi.getActivePage() * pgsz;						to = from + pgsz; //excluded					} else {						from = to = 0;					}					int j = 0;					for (Iterator it = _items.iterator(); it.hasNext(); ++j) {						final Listitem item = (Listitem)it.next();						if (selItems.contains(item)) {							addItemToSelection(item);						} else if (!paging) {							removeItemFromSelection(item);						} else {							final int index = item.getIndex();							if (index >= from && index < to)								removeItemFromSelection(item);						}					}				}			} finally {				_noSmartUpdate = false;			}		}	}	/** An iterator used by _heads.	 */	private class Iter implements Iterator {		private final Iterator _it = getChildren().iterator();		private int _j;		public boolean hasNext() {			return _j < _hdcnt;		}		public Object next() {			final Object o = _it.next();			++_j;			return o;		}		public void remove() {			throw new UnsupportedOperationException();		}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -