跳转到内容

ZK/操作指南/外观

来自维基教科书,开放的书籍,为开放的世界

自定义外观

[编辑 | 编辑源代码]

列表单元格

[编辑 | 编辑源代码]

列表单元格的默认样式如下

div.listbox-body td {
...
}

因此,要使用类来自定义外观,您需要指定如下内容

div.listbox-body td.mine {
...
}

然后,您可以在 ZUML 页面中指定 sclass。

<listcell sclass="mine"/>

创建自定义组件

[编辑 | 编辑源代码]

您可以创建新的自定义组件来以您想要的方式显示自身,而不是仅仅修改内置组件的 .dsp 文件。有关说明,请参阅 zkoss.org 网站上的 DevGuide PDF。请注意,演示页面上的“Dojo 鱼眼”示例以及 zkforge 上的代码是创建自定义组件的示例。

如何将“正在处理...”的微调器和其他系统消息更改为更美观的内容?

[编辑 | 编辑源代码]

以下是绘制自定义微调器 xhtml 的 zk-progress-prompt.js 文件

/*
* Contributed by MaryGrace http://sourceforge.net/users/marygrace/
*/
function Boot_progressbox(id, msg, x, y) { 
 
var myWidth = 0, myHeight = 0; 
if( typeof( window.innerWidth ) == 'number' ) { 
//Non-IE 
myWidth = window.innerWidth; 
myHeight = window.innerHeight; 
} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) { 
//IE 6+ in 'standards compliant mode' 
myWidth = document.documentElement.clientWidth; 
myHeight = document.documentElement.clientHeight; 
} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) { 
//IE 4 compatible 
myWidth = document.body.clientWidth; 
myHeight = document.body.clientHeight; 
} 
 
x = (myWidth-180) / 2;  
y = (myHeight-70) / 2;  
 
var html = '<div id="'+id+'" style="left:'+x+'px;top:'+y+'px;' 
+'position:absolute;z-index:79000;background-color:white;' 
+'white-space:nowrap;border:4px solid #77a;padding:15px; font-weight:bold;">' 
+'<img alt="." src="'+zk.getUpdateURI('/web/zk/img/progress.gif')+'"/> ' 
+" Attendere prego..."+'</div>'; 
document.body.insertAdjacentHTML("afterbegin", html); 
return $e(id); 
} 

以下是当 zscript 中抛出异常时使用的 zk-zscript-error-message.js 文件。注意:错误消息是一个笑话,您的用户可能觉得它不好笑,因此您需要编辑它...

zkau.cmd0.alert = function (msg) {

if (!zk._errcnt) zk._errcnt = 1;
var id = "zk_err_" + zk._errcnt++;
var box = document.createElement("DIV");
document.body.appendChild(box);

var myWidth = 0, myHeight = 0; 
if( typeof( window.innerWidth ) == 'number' ) { 
//Non-IE 
myWidth = window.innerWidth; 
myHeight = window.innerHeight; 
} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) { 
//IE 6+ in 'standards compliant mode' 
myWidth = document.documentElement.clientWidth; 
myHeight = document.documentElement.clientHeight; 
} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) { 
//IE 4 compatible 
myWidth = document.body.clientWidth; 
myHeight = document.body.clientHeight; 
} 
 
x = (myWidth-180) / 2;  
y = (myHeight-70) / 2;  
 
var html = '<div id="'+id+'" style="left:'+x+'px;top:'+y+'px;' 
+'position:absolute;z-index:79000;background-color:white;' 
+'white-space:nowrap;border:4px solid #77a;padding:15px; font-weight:bold;">' 
+'<img alt="." src="'+zk.getUpdateURI('/web/zul/img/error.gif')+'"/> ' 
+" Hum. The zscript threw and exception. Most likely a coding problem. Sack the developer!<br/>"
+" The exception message was: "
+zk.encodeXML(msg, true)+'</div>'; 

zk._setOuterHTML(box, html);
box = $e(id); //we have to retrieve back
try {
new Draggable(box, {
handle: box, zindex: box.style.zIndex,
starteffect: zk.voidf, starteffect: zk.voidf, endeffect: zk.voidf});
} catch (e) {
}
}; 

以下是当 AJAX 连接失败(例如服务器停止运行或用户网络连接断开)时绘制自定义框的 zk-ajax-error-message.js 文件

<nowiki>
zk.error = function (msg) {
if (!zk._errcnt) zk._errcnt = 1;
var id = "zk_err_" + zk._errcnt++;
var box = document.createElement("DIV");
document.body.appendChild(box);

var myWidth = 0, myHeight = 0; 
if( typeof( window.innerWidth ) == 'number' ) { 
//Non-IE 
myWidth = window.innerWidth; 
myHeight = window.innerHeight; 
} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) { 
//IE 6+ in 'standards compliant mode' 
myWidth = document.documentElement.clientWidth; 
myHeight = document.documentElement.clientHeight; 
} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) { 
//IE 4 compatible 
myWidth = document.body.clientWidth; 
myHeight = document.body.clientHeight; 
} 
 
x = (myWidth-180) / 2;  
y = (myHeight-70) / 2;  
 
var html = '<div id="'+id+'" style="left:'+x+'px;top:'+y+'px;' 
+'position:absolute;z-index:79000;background-color:white;' 
+'white-space:nowrap;border:4px solid #77a;padding:15px; font-weight:bold;">' 
+'<img alt="." src="'+zk.getUpdateURI('/web/zul/img/error.gif')+'"/> ' 
+" Oops! AJAX Issues! Has the server been switched off?<br/>"
+" The technical error message to report to IT is the following:<br/>"
+zk.encodeXML(msg, true)+'</div>'; 

zk._setOuterHTML(box, html);
box = $e(id); //we have to retrieve back
try {
new Draggable(box, {
handle: box, zindex: box.style.zIndex,
starteffect: zk.voidf, starteffect: zk.voidf, endeffect: zk.voidf});
} catch (e) {
}
}; 

function errorImg(){
// this is just to ensure that the error images is loaded but off screen
// as this image will only be shown if you kill the server when it will 
// no longer be able to loaded
return "<div style='position:absolute;left:-1000px;right:100px'><img src='"+zk.getUpdateURI("/web/zul/img/error.gif")+"'/></div>";
}
</nowki>

以下是一些 zul,当您单击“长时间处理!”按钮时将显示此微调器,当您单击“抛出异常!”按钮时将显示 zscript 异常消息。注意:只有在停止服务器或断开电脑与网络的连接,然后按任一按钮时,您才会看到 AJAX 异常消息。

/*
* Originally contributed by MaryGrace http://sourceforge.net/users/marygrace/
*/
<zk> 
<window> 
<zscript> 
<![CDATA[  
public void go() { 
Thread.sleep(5000); 
} 
public void exception(){
	throw new java.lang.RuntimeException("deliberate exception");
}
]]>  
</zscript>  
<button label="Long Processing!" onClick="go()"/> 

<button label="Throws Exception!" onClick="exception()"/> 
</window> 
<script type="text/javascript" src="/examples/zk-progress-prompt.js" /> 
<script type="text/javascript" src="/examples/zk-ajax-error-message.js" /> 
<script type="text/javascript" src="/examples/zk-zscript-error-message.js" /> 
<script type="text/javascript">
// here we load the image into be page else it wont render for the AJAX error 
// message if the server goes down and the browser has not cached the image yet
document.write(errorImg());
</script>
</zk> 


如何在 ZK 3.5.x 版本中自定义 ZK 按钮的图像

[编辑 | 编辑源代码]

例如,

<zk><style>
.z-button .z-button-tl, .z-button .z-button-tr, .z-button .z-button-bl, .z-button .z-button-br,
.z-button .z-button-tm, .z-button .z-button-bm, .z-button .z-button-cl, .z-button .z-button-cr, .z-button .z-button-cm {
    background-image:none;
} 
</style>
<button tooltiptext="Here is a button" image="http://www.freebuttons.com/freebuttons/Alien/AlienDd5.gif"/>
</zk>


使用 CSS “id” 选择器为指定窗口组件设置样式

[编辑 | 编辑源代码]

窗口是 ZK 中一个复杂的组件。要更改其样式,有时开发人员必须覆盖默认 CSS 文件中的样式定义才能使其起作用。例如,如果我们要更改窗口的标题样式。以下代码将不起作用,因为 style 属性适用于窗口本身,而不是标题。

<window id="win1" title="1st window" border="normal" width="200px" style="background-color: lightyellow"> 
  Window 1
</window> 

更改窗口标题样式的正确方法如下

<window id="win1" title="1st window" border="normal" width="200px" style="background-color: lightyellow"> 
  <style>.title td {background-color:red; color: white;}</style>
  Window 1
</window> 

style 组件会将 CSS 选择器 <style> .title td {...} </style> 生成到最终的 html 页面中,并由浏览器解释以使用此新样式。

很好,现在我们可以毫无问题地更改窗口的标题样式...等等,如果我在同一个页面上有不止一个窗口,所有窗口的标题都会更改为新样式,因为它是定义为 CSS “类”选择器。如果我只想更改一个窗口的标题,而保持其他窗口不变,该怎么办?您必须定义 CSS “id” 选择器。问题是,众所周知,最终生成的 html 标签 id 是由 ZK 引擎自动生成的 uuid。我们事先不知道 uuid 值,并且在生成后它是不可变的。如何定义 CSS “id” 选择器?别担心,使用 EL 表达式来为您完成这项工作。以下代码将只更改 win1 的样式,而 win2 将保持不变

<zk>
 <window id="win1" title="1st window" border="normal" width="200px" style="background-color:lightyellow"> 
   <style> 
     #${win1.uuid} td {background-color:red; color: white;} 
   </style>
   Window 1
 </window> 
 <window id="win2" title="2nd window" border="normal" width="200px" style="background-color: lightyellow"> 
   Window 2
 </window> 
</zk>

请注意,这在 IE6 中不起作用。请尝试使用 #${win1.uuid} #\${win1.uuid} 替换,这在 IE6 和 FF1 中有效

编辑组件的 .dsp 文件

[编辑 | 编辑源代码]

您可以使用 winzip 或 jar.exe 将 web 应用程序的 WEB-INF/lib 文件夹中的 zul jar 文件解压缩到 WEB-INF/classes 文件夹中。然后从 lib 中删除 jar 文件,以便您的 servlet 容器从文件系统中拾取所有类文件、图像和 dsp 文件。搜索 dsp 文件和图像,您会找到 zk 用作 gif 图像的一组 dsp 文件,这些文件的名字与 xul 元素匹配,例如 /web/zul/html/tabbox.dsp。如果您打开此文件,您会看到它是将 ZK 组件转换为浏览器 html 的模板,它输出 html 表格标记。您可以编辑这些文件中的 html 标记,然后重启服务器或重新加载应用程序以查看效果。


网格、树和列表框中的 CSS 字体

[编辑 | 编辑源代码]

3.0RC

  • 以下是一个标题 CSS。
  • div.tree-head th, div.listbox-head th, div.grid-head th, div.listbox-paging th, div.grid-paging th {
    	overflow: hidden; border: 1px solid;
    	border-color: #DAE7F6 #7F9DB9 #7F9DB9 #DAE7F6;
    	white-space: nowrap; padding: 2px;
    	font-size: small; font-weight: normal;
    }
  • 以下是一个正文 CSS。
  • div.tree-body td, div.listbox-body td, div.listbox-paging td {
    	cursor: pointer; padding: 0 2px;
    	font-size: small; font-weight: normal;
    }
    

3.0

  • 以下是一个标题 CSS。
  • div.head-cell-inner {
    	font-size: small; font-weight: normal;
    }
  • 以下是一个正文 CSS。
  • div.cell-inner {
    	font-size: small; font-weight: normal;
    }
    

通过样式修改树图标

tree-root-open 
The icon used to represent the open state for tree items at the root level. 
tree-root-close 
The icon used to represent the close state for tree items at the root level. 
tree-tee-open 
The icon used to represent the open state for tree items that have next siblings. 
tree-tee-close 
The icon used to represent the close state for tree items at have next siblings. 
tree-last-open 
The icon used to represent the open state for tree items that don't have next siblings. 
tree-last-close 
The icon used to represent the close state for tree items at don't have next siblings. 
tree-tee 
The icon used to represent the T-shape icon. 
tree-vbar 
The icon used to represent the |-shape (vertical bar) icon. 
tree-last 
The icon used to represent the L-shape icon -- no next sibling. 
tree-spacer 
The icon used to represent the blank icon.  
 

以下是一个对应的图像:https://archive.is/20130707075935/img512.imageshack.us/img512/8242/treeicondesut8.png

以下是一些 css 类

span.tree-root-open, span.tree-tee-open, span.tree-last-open { 
width: 18px; min-height: 18px; height: 100%; 
background-image: url(${c:encodeURL('~./zul/img/tree/open.png')}); 
background-repeat: no-repeat; 
display:-moz-inline-box; vertical-align:top; 
display:inline-block; 
} 
span.tree-root-close, span.tree-tee-close, span.tree-last-close { 
width: 18px; min-height: 18px; height: 100%; 
background-image: url(${c:encodeURL('~./zul/img/tree/close.png')}); 
background-repeat: no-repeat; 
display:-moz-inline-box; vertical-align:top; 
display:inline-block; 
} 
span.tree-tee, span.tree-vbar, span.tree-last, span.tree-spacer { 
width: 18px; min-height: 18px; height: 100%; 
display:-moz-inline-box; vertical-align:top; 
display:inline-block; 
}

窗口中的 CSS

[编辑 | 编辑源代码]
  • 左边
  • td.lwt-MOLDE_NAME
  • 中间
  • td.mwt-MOLDE_NAME
  • 右边
  • td.rwt-MOLDE_NAME

EX

td.lwt-embedded{...};
td.mwt-embedded{...};
td.rwt-embedded{...};
华夏公益教科书