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

📄 htmlbasedcomponent.java

📁 ZK 基础介绍 功能操作 模块 结合数据库操作
💻 JAVA
字号:
/* HtmlBasedComponent.java{{IS_NOTE	Purpose:			Description:			History:		Sat Dec 31 12:30:18     2005, Created by tomyeh}}IS_NOTECopyright (C) 2004 Potix Corporation. All Rights Reserved.{{IS_RIGHT	This program is distributed under GPL Version 2.0 in the hope that	it will be useful, but WITHOUT ANY WARRANTY.}}IS_RIGHT*/package org.zkoss.zk.ui;import org.zkoss.lang.Objects;import org.zkoss.lang.Strings;import org.zkoss.xml.HTMLs;import org.zkoss.zk.ui.AbstractComponent;import org.zkoss.zk.ui.event.Event;import org.zkoss.zk.ui.event.Events;import org.zkoss.zk.ui.event.EventListener;import org.zkoss.zk.ui.ext.client.Movable;import org.zkoss.zk.ui.ext.client.Sizable;import org.zkoss.zk.ui.ext.client.ZIndexed;import org.zkoss.zk.ui.ext.render.ZidRequired;import org.zkoss.zk.ui.ext.render.Floating;import org.zkoss.zk.ui.sys.ComponentCtrl;import org.zkoss.zk.au.out.AuFocus;/** * A skeletal implementation for HTML based components. * It simplifies to implement methods common to HTML based components. * * <p>It supports * <ul> * <li>{@link #getSclass} and {@link #getStyle}.</li> * <li>{@link #getWidth}, {@link #getHeight}, {@link #getLeft}, * {@link #getTop}, {@link #getZIndex}</li> * <li>{@link #getOuterAttrs}</li> * <li>{@link #getInnerAttrs}</li> * <li>{@link #focus}</li> * </ul> * * @author tomyeh */abstract public class HtmlBasedComponent extends AbstractComponent {	private String _tooltiptext;	/** The width. */	private String _width;	/** The height. */	private String _height;	/** The CSS class. */	private String _sclass;	/** The CSS style. */	private String _style;	private String _left, _top;	/** The draggable. */	private String _draggable;	/** The droppable. */	private String _droppable;	private int _zIndex = -1;	protected HtmlBasedComponent() {	}	/** Returns the left position.	 */	public String getLeft() {		return _left;	}	/** Sets the left position.	 */	public void setLeft(String left) {		if (!Objects.equals(_left, left)) {			_left = left;			smartUpdate("style.left", getLeft());		}	}	/** Returns the top position.	 */	public String getTop() {		return _top;	}	/** Sets the top position.	 */	public void setTop(String top) {		if (_top != top) {			_top = top;			smartUpdate("style.top", getTop());		}	}	/** Returns the Z index.	 * <p>Default: -1 (means system default;	 */	public int getZIndex() {		return _zIndex;	}	/** Sets the Z index.	 */	public void setZIndex(int zIndex) {		if (_zIndex < -1)			_zIndex = -1;		if (_zIndex != zIndex) {			_zIndex = zIndex;			if (_zIndex < 0)				smartUpdate("style.zIndex", null);			else				smartUpdate("style.zIndex", _zIndex);		}	}	/** Returns the height. If null, the best fit is used.	 * <p>Default: null.	 */	public String getHeight() {		return _height;	}	/** Sets the height. If null, the best fit is used.	 */	public void setHeight(String height) {		if (height != null && height.length() == 0)			height = null;		if (!Objects.equals(_height, height)) {			_height = height;			smartUpdate("style.height", getHeight());		}	}	/** Returns the width. If null, the best fit is used.	 * <p>Default: null.	 */	public String getWidth() {		return _width;	}	/** Sets the width. If null, the best fit is used.	 */	public void setWidth(String width) {		if (width != null && width.length() == 0)			width = null;		if (!Objects.equals(_width, width)) {			_width = width;			smartUpdate("style.width", getWidth());		}	}	/** Returns the text as the tooltip.	 * <p>Default: null.	 */	public String getTooltiptext() {		return _tooltiptext;	}	/** Sets the text as the tooltip.	 */	public void setTooltiptext(String tooltiptext) {		if (tooltiptext != null && tooltiptext.length() == 0)			tooltiptext = null;		if (!Objects.equals(_tooltiptext, tooltiptext)) {			_tooltiptext = tooltiptext;			smartUpdate("title", _tooltiptext);		}	}	/** Returns the CSS class.	 * Due to Java's limitation, we cannot use the name called getClas.	 * <p>Default: null (the default value depends on element).	 * @see #getRealSclass	 */	public String getSclass() {		return _sclass;	}	/** Sets the CSS class.	 */	public void setSclass(String sclass) {		if (sclass != null && sclass.length() == 0) sclass = null;		if (!Objects.equals(_sclass, sclass)) {			_sclass = sclass;			smartUpdate("class", getSclass());		}	}	/** Sets the CSS class. This method is a bit confused with Java's class,	 * but we provide it for XUL compatibility.	 * The same as {@link #setSclass}.	 */	public final void setClass(String sclass) {		setSclass(sclass);	}	/** Returns the CSS style.	 * <p>Default: null.	 */	public String getStyle() {		return _style;	}	/** Sets the CSS style.	 */	public void setStyle(String style) {		if (style != null && style.length() == 0) style = null;		if (!Objects.equals(_style, style)) {			_style = style;			smartUpdate("style", getRealStyle());		}	}	/** Sets "true" or "false" to denote whether a component is draggable,	 * or an identifier of a draggable type of objects.	 *	 * <p>The simplest way to make a component draggable is to set	 * this attribute to true. To disable it, set this to false.	 *	 * <p>If there are several types of draggable objects, you could	 * assign an identifier for each type of draggable object.	 * The identifier could be anything but empty.	 *	 * @param draggable "false", null or "" to denote non-draggable; "true" for draggable	 * with anonymous identifier; others for an identifier of draggable.	 */	public void setDraggable(String draggable) {		if (draggable != null		&& (draggable.length() == 0 || "false".equals(draggable)))			draggable = null;		if (!Objects.equals(_draggable, draggable)) {			_draggable = draggable;			smartUpdate("z.drag", _draggable);		}	}	/** Returns the identifier of a draggable type of objects, or "false"	 * if not draggable (never null or empty).	 */	public final String getDraggable() {		return _draggable != null ? _draggable: "false";	}	/** Sets "true" or "false" to denote whether a component is droppable,	 * or a list of identifiers of draggable types of objects that could	 * be droped to this component.	 *	 * <p>The simplest way to make a component droppable is to set	 * this attribute to true. To disable it, set this to false.	 *	 * <p>If there are several types of draggable objects and this	 * component accepts only some of them, you could assign a list of	 * identifiers that this component accepts, separated by comma.	 * For example, if this component accpets dg1 and dg2, then	 * assign "dg1, dg2" to this attribute.	 *	 * @param droppable "false", null or "" to denote not-droppable;	 * "true" for accepting any draggable types; a list of identifiers,	 * separated by comma for identifiers of draggables this compoent	 * accept (to be dropped in).	 */	public void setDroppable(String droppable) {		if (droppable != null		&& (droppable.length() == 0 || "false".equals(droppable)))			droppable = null;		if (!Objects.equals(_droppable, droppable)) {			_droppable = droppable;			smartUpdate("z.drop", _droppable);		}	}	/** Returns the identifier of a droppable type of objects, or "false"	 * if not droppable (never null or empty).	 */	public final String getDroppable() {		return _droppable != null ? _droppable: "false";	}	/** Sets focus to this element. For element that does not accept focus,	 * this method has no effect.	 */	public void focus() {		response("focus", new AuFocus(this));	}	//-- component developer only --//	/** Returns the exterior attributes for generating the enclosing	 * HTML tag; never return null.	 *	 * <p>Used only by component developers.	 *	 * <p>Default: Generates the tooltip text, style, sclass, draggable	 * and droppable attribute if necessary.	 * In other words, the corresponding attribute is generated if	 * {@link #getTooltiptext}, {@link #getRealStyle},	 * {@link #getSclass}, {@link #getDraggable}, {@link #getDroppable}	 * are defined.	 *	 * <p>You have to call both {@link #getOuterAttrs} and	 * {@link #getInnerAttrs} to generate complete attributes.	 *	 * <p>For simple components that all attributes are put on	 * the outest HTML element, all you need is as follows.	 *	 * <pre><code>&lt;xx id="${self.uuid}"${self.outerAttrs}${self.innerAttrs}&gt;</code></pre>	 *	 * <p>If you want to put attributes in a nested HTML element, you	 * shall use the following pattern. Notice: if {@link #getInnerAttrs}	 * in a different tag, the tag must be named with "${self.uuid}!real".	 *	 * <pre><code>&lt;xx id="${self.uuid}"${self.outerAttrs}&gt;	 * &lt;yy id="${self.uuid}!real"${self.innerAttrs}&gt;...	 *</code></pre>	 *	 * <p>Note: This class handles non-deferrable event listeners automatically.	 * However, you have to invoke {@link #appendAsapAttr} for each event	 * the component handles in {@link #getOuterAttrs} as follows.	 *<pre><code>	 *	appendAsapAttr(sb, Events.ON_OPEN);	 *  appendAsapAttr(sb, Events.ON_CHANGE);	 *</code></pre>	 *	 * <p>Theorectically, you could put any attributes in either	 * {@link #getInnerAttrs} or {@link #getOuterAttrs}.	 * However, zkau.js assumes all attributes are put at the outer one.	 * If you want something different, you have to provide your own	 * setAttr (refer to how checkbox is implemented).	 */	public String getOuterAttrs() {		final StringBuffer sb = new StringBuffer(64);		HTMLs.appendAttribute(sb, "class", getRealSclass());		HTMLs.appendAttribute(sb, "style", getRealStyle());		HTMLs.appendAttribute(sb, "title", getTooltiptext());		HTMLs.appendAttribute(sb, "z.drag", _draggable);		HTMLs.appendAttribute(sb, "z.drop", _droppable);		final Object xc = getExtraCtrl();		if ((xc instanceof ZidRequired) && ((ZidRequired)xc).isZidRequired())			HTMLs.appendAttribute(sb, "z.zid", getId());		if ((xc instanceof Floating) && ((Floating)xc).isFloating())			sb.append(" z.float=\"true\"");		return sb.toString();	}	/** Returns the interior attributes for generating the inner HTML tag;	 * never return null.	 *	 * <p>Used only by component developers.	 *	 * <p>Default: empty string.	 * Refer to {@link #getOuterAttrs} for more details.	 */	public String getInnerAttrs() {		return "";	}	/** Returns the real style class that will be generated to the client	 * (when {@link #getOuterAttrs} is called).	 *	 * <p>Default: it simply returns {@link #getSclass}.	 *	 * <p>Derived classes might override it to provide, say, dual style classes.	 * For example,	 * <pre><code>final String sclass = getSclass();	 *return sclass != null ? sclass + " my-addon": "myaddon";</code></pre>	 *	 * @since 3.0.0	 */	protected String getRealSclass() {		return getSclass();	}	/** Returns the real style that will be generated to client	 * (when {@link #getOuterAttrs} is called).	 *	 * <p>Default: this method will append width, height and others	 * to {@link #setStyle} (never null).	 *	 * <p>Use {@link #getRealStyleFlags} to control what attributes to	 * exclude.	 */	protected String getRealStyle() {		final int flags = getRealStyleFlags();		final StringBuffer sb = new StringBuffer(32);		if ((flags & RS_NO_WIDTH) == 0)			HTMLs.appendStyle(sb, "width", getWidth());		if ((flags & RS_NO_HEIGHT) == 0)			HTMLs.appendStyle(sb, "height", getHeight());		HTMLs.appendStyle(sb, "left", getLeft());		HTMLs.appendStyle(sb, "top", getTop());		final int zIndex = getZIndex();		if (zIndex > 0)			HTMLs.appendStyle(sb, "z-index", Integer.toString(zIndex));		String style = getStyle();		if (style != null && style.length() > 0) {			sb.append(style);			if (!style.endsWith(";")) sb.append(';');		}		if ((flags & RS_NO_DISPLAY) == 0 && !isVisible()) {			if (sb.length() == 0)				return "display:none;";			sb.append("display:none;");		}		return sb.toString();	}	/** Used by {@link #getRealStyleFlags} to denote that {@link #getRealStyle}	 * shall not generate the width style.	 */	protected static final int RS_NO_WIDTH = 0x0001;	/** Used by {@link #getRealStyleFlags} to denote that {@link #getRealStyle}	 * shall not generate the height style.	 */	protected static final int RS_NO_HEIGHT = 0x0002;	/** Used by {@link #getRealStyleFlags} to denote that {@link #getRealStyle}	 * shall not generate the display style.	 */	protected static final int RS_NO_DISPLAY = 0x0004;	/** Returns a combination of {@link #RS_NO_WIDTH} and {@link #RS_NO_HEIGHT}.	 * <p>Default: return 0.	 */	protected int getRealStyleFlags() {		return 0;	}	//-- Component --//	//--ComponentCtrl--//	/** Used by {@link #getExtraCtrl} to create a client control.	 * It is used only by component developers.	 *	 * <p>Defaut: creates an instance of {@link HtmlBasedComponent.ExtraCtrl}.	 */	protected Object newExtraCtrl() {		return new ExtraCtrl();	}	/** A utility class to implement {@link #getExtraCtrl}.	 * It is used only by component developers.	 *	 * <p>If a component requires more client controls, it is suggested to	 * override {@link #newExtraCtrl} to return an instance that extends from	 * this interface.	 */	protected class ExtraCtrl implements Movable, Sizable, ZIndexed {		//-- Movable --//		public void setLeftByClient(String left) {			_left =left;		}		public void setTopByClient(String top) {			_top = top;		}		//-- Sizable --//		public void setWidthByClient(String width) {			_width = width;		}		public void setHeightByClient(String height) {			_height = height;		}		//-- ZIndexed --//		public void setZIndexByClient(int zIndex) {			_zIndex = zIndex;		}	}}

⌨️ 快捷键说明

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