From Documentation
Revision as of 01:53, 21 September 2010 by Elton776 (talk | contribs) (moved Small Talks/ZKThemer to Small Talks/2009/July/ZKThemer)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
José L. Casas Serradilla, M.M.T. Seguros, Spain
July 2, 2009
3.6.2, not tested on previous versions


zkthemer is an automatic color theme generator


You can download zkthemer from: ZK Forge or work for ZK3 and ZK5 version. New

How to Use

zkthemer is a java command line application, it should work on any Java 6 platform, though I have only tested it on Linux.

Generate a new color theme

The instructions shown are on a bash shell. It should be similar on a Windows cmd line.

$ java -jar zkthemer.jar 
Option is mandatory: --baseColor -c value : Base color in 6 hex digit format, for example: A4BC03
Option is mandatory: --themeName -t value : Theme name
Option is mandatory: --zklib -z value : Location (directory) containing the zk jars
The options available are:
	--baseColor -c value : Base color in 6 hex digit format, for example: A4BC03
	--themeName -t value : Theme name
	--zklib -z value : Location (directory) containing the zk jars
        --ignoreFiles -i value : The names of ignore components (splitter with comma such as '-i colorbox,grid', type '-i n' if won't)

The first step is to put all the zk jars of your current version (only really tested on 3.6.2) in one directory, for example:

$ ls /home/jlcasas/ZKTheme/zk-jars/
zcommon-3.6.2.jar  zhtml-3.6.2.jar  zk-3.6.2.jar  zkex-3.6.2.jar  zkplus-3.6.2.jar  zml-3.6.2.jar  zul-3.6.2.jar  zweb-3.6.2.jar

We then run zkthemer with the theme name "lila" (Spanish for violet), giving 3E48AC as the basic color.

$ java -jar zkthemer.jar -c 3e48ac -z /home/jlcasas/ZKTheme/zk-jars -t lila -i n
Generated file: lila.jar

After running the command a new jar called "lila.jar" is generated.

$ ls
lila.jar  zkthemer.jar

This is the theme jar that you should use in your application classpath.

If you want ignore some component such as colorbox, you can type '-i component name'

$ java -jar zkthemer.jar -c 3e48ac -z /home/jlcasas/ZKTheme/zk5-jars -t lila -i colorbox 
Generated file: lila.jar

or multiple

$ java -jar zkthemer.jar -c 3e48ac -z /home/jlcasas/ZKTheme/zk5-jars -t lila -i colorbox,grid
Generated file: lila.jar

Caution: In ZK 3, ignore some name maybe cause strange css, because it original design to put the css of multiple component in a file, I will upgrade it to filter css content instead of file name in my free time.

Use the new theme in your application

It's not enough to just drop the created jar in your application classpath. You have to do the following:

1. In your zk.xml add the following


2. Place the lila.jar in your application classpath.

3. Restart your application. It should look like:


NOTICE The class zkthemer.ThemeProvider is included in the generated jar lila.jar. You may use another Theme Provider class as long as it injects the appropriate *.css.dsp URLs like the following code:

public class ThemeProvider implements org.zkoss.zk.ui.util.ThemeProvider {

    private String themeName;

    public ThemeProvider() {
        try {
            InputStream is = getClass().getResourceAsStream("/zkthemer.properties");
            if (is == null)
                throw new RuntimeException("Cannot find zkthemer.properties");
            Properties prop = new Properties();
            themeName = (String) prop.get("theme");
            if (themeName == null) {
                throw new RuntimeException("zkthemer.properties found, but missing 'theme' entry");
        } catch (IOException e) {
            throw new RuntimeException(e);

    public Collection getThemeURIs(Execution exec, List uris) {

        List newUris = new ArrayList();

        for (Iterator it = uris.iterator(); it.hasNext();) {
            String uri = (String) it.next();
            if (uri.startsWith("~./")) {
                uri = "~./" + themeName + "/" + uri.substring(3);

        return newUris;


Source code

You can download the source code as an Eclipse project from: ZK3, ZK5(compatible ZK3)

See Also

For ZK5, you may refer to the discussion of forum. ZK Different Themes

Copyright © Potix Corporation. This article is licensed under GNU Free Documentation License.