1

我在我的项目中使用ZK 框架我在 div 或 Window 组件中有很多其他组件,谁能告诉我如何在某些情况下禁用一个 DivWindow 组件。当我检查这些组件没有任何 disable 属性时。

disable我们可以采取的 任何其他方式,否则我必须禁用 Div or 或 or 中的每个组件WindowDivWindowLayout

4

3 回答 3

2

这里有一个非常简单的方法来禁用所有实现
Disable接口的组件。

@Wire("disable")
private List<Disable> allToDisable;

private disableAll(List<Disable> list){
   for(Disable d : list){
       d.setDisabled(true);
   }
}

您可以编辑路径@Wire以满足您的需要,
使用方法Selectors或采用 zk 选择器路径的任何其他方法
。让它以 结尾
"disable",所以它应该选择每个
实现接口的组件。

于 2013-05-16T10:33:46.067 回答
2

我认为没有简单的方法,我会尝试这样的事情(在谷歌上找到了这个,但我记得在我的上一个项目中做了类似的事情)

public static void disableComponents( AbstractComponent pComponent ) {

  for( Object o : pComponent.getChildren() ) {

     AbstractComponent ac = ( AbstractComponent ) o;

     try {
        Method m = ac.getClass().getMethod( "setDisabled", Boolean.TYPE );
        m.invoke( ac, true );
     } catch( Exception e ) {
     }

     List children = ac.getChildren();
     if( children != null ) {
        disableComponents( ac );
     }
  }

}

于 2013-05-16T09:22:32.663 回答
1

我们可以改进 Gatekeeper(2013 年 5 月 16 日 9:22)的解决方案,添加条件“如果”。if (ac instanceof Disable) { --- 代码 -- }

public static void disableComponents( AbstractComponent pComponent ) {
    for( Object o : pComponent.getChildren() ) {
        AbstractComponent ac = ( AbstractComponent ) o;
        try {
            if (ac instanceof Disable) {
                Method m = ac.getClass().getMethod("setDisabled", Boolean.TYPE);
                m.invoke(ac, true);
            }
        } catch( Exception e ) {
            e.printStackTrace();
        }

        List children = ac.getChildren();
        if( children != null ) {
            disableComponents( ac );
        }
    }
}
于 2015-12-09T17:27:53.920 回答