Search code examples
javaoverridingzk

ZK 8.5.0 how to override button widget setLabel function


The ZK setLabel() function of Button widget does not work; when the code runs to the line like foobutton.setLabel(mystring), the button disappears from the browser.

In the eclipse IDE, if I hover on the setLabel() function, the IDE shows this message:

If label is changed, the whole component is invalidate.Thus, you want to smart-update, you have to override this method.

Using ZK 8.5.0

Inside the controller class, I declare:

 @Wire
 Button delSelectedMonitor;

Inside the controller, I implement a class which implements EventListener:

public class onClickHolderEditMode implements EventListener{

    public void onEvent(Event event) throws Exception {
        clickedDivEditMode = (Div) event.getTarget();
        clickedDivIdEditMode = clickedDivEditMode.getId().split(myUtil.monitorholderString)[1];

        String curName = getCamNameById(clickedDivIdEditMode);
        delSelectedMonitor.setLabel("DELETE:"+clickedDivIdEditMode+","+curName);
    }


}

event binding:

tmpdiv.addEventListener("onClick",  new onClickHolderEditMode());

My expectation is that when someone clicks the tmpdiv, the button delSelectedMonitor will change its label according to the property of tmpdiv. However as I say previously, the button is just disappearing.

https://www.zkoss.org/wiki/ZK_Client-side_Reference/General_Control/Widget_Customization I have tried the section "Specify Your Own Widget Class" at the above website link, but the browser will be pending.

Please help, thank you.


Solution

  • I would prefer a different approach.

    Why not use a

    <button label="@load(vm.xyz)" ... />
    

    (I wrote using MVVM pattern) and modify variable xyz in clicking action?

    Check out http://books.zkoss.org/zk-mvvm-book/8.0/syntax/load.html for implementing guide.