Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ZK Radiogroup返回不正确的getSelectedIndex()_Java_Zk - Fatal编程技术网

Java ZK Radiogroup返回不正确的getSelectedIndex()

Java ZK Radiogroup返回不正确的getSelectedIndex(),java,zk,Java,Zk,我正在使用ZK 8.5.2.1,我有一个带有Radiogroup的弹出窗口。zul: <zk xmlns="http://www.zkoss.org/2005/zul" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.zkoss.org/2005/zul http://www.zkoss.org/2005/zul/zul.xsd"> <pop

我正在使用ZK 8.5.2.1,我有一个带有
Radiogroup
的弹出窗口。
zul

<zk xmlns="http://www.zkoss.org/2005/zul" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.zkoss.org/2005/zul http://www.zkoss.org/2005/zul/zul.xsd">
    <popup use="com.myproject.webapp.docbrowse.filter.FiltrationModePopup" width="330px">
            <vlayout sclass="content">
                <hlayout>
                    <label sclass="title" value="List form setup"/>
                </hlayout>
                <radiogroup id="rgScrollerMode" sclass="scrollermode-radio">
                    <grid>
                        <rows>
                            <row sclass="radio-border">
                                <radio label="Standart"/>
                            </row>
                            <row sclass="radio-border">
                                <radio label="Archive / Select year"/>
                                <hlayout id="archivePanel" use="com.myproject.webapp.docbrowse.ArchivePanel"/>
                            </row>
                            <row sclass="radio-border">
                                <radio label="Trash"/>
                            </row>
                        </rows>
                    </grid>
                </radiogroup>
        . . .
                <div align="right">
                    <button id="okButton" label="Accept" sclass="acceptButton"/>
                    <button id="cancelButton" label="Cancel" sclass="cancelButton"/>
                </div>
            </vlayout>
    </popup>
</zk>

所以,当弹出窗口显示在屏幕上,我选择一些单选项目并按下“接受”按钮时,selectedIndex并不总是正确的。有时是-1,有时是旧的选定值,有时是正确的。怎么了?

我简化了您的代码,它总是得到正确的选定索引

    public class FiltrationModePopup extends Popup implements AfterCompose, IdSpace {
        private Radiogroup rgScrollerMode;

        @Override
        public void afterCompose() {
            rgScrollerMode = (Radiogroup) getFellow("rgScrollerMode");
            final Button okButton = (Button) getFellow("okButton");
            okButton.addEventListener(Events.ON_CLICK, new SerializableEventListener<Event>() {
                @Override
                public void onEvent(Event event) {
                    System.out.println(rgScrollerMode.getSelectedIndex());
                    close();
                }
            });
            addForward(Events.ON_OK, okButton, Events.ON_CLICK);
        }
    }
public类过滤模式弹出窗口扩展弹出窗口实现后组合,IdSpace{
专用放射组rgScrollerMode;
@凌驾
公共空间{
rgScrollerMode=(放射组)getFellow(“rgScrollerMode”);
最终按钮okButton=(按钮)getFellow(“okButton”);
okButton.addEventListener(Events.ON_单击,新建SerializableEventListener()){
@凌驾
公共无效事件(事件){
System.out.println(rgScrollerMode.getSelectedIndex());
close();
}
});
addForward(Events.ON_确定、OK按钮、Events.ON_单击);
}
}

在调用
getSelectedIndex()
之前,需要跟踪发生的情况。您可以在onClick listener中注释掉代码,然后逐行逐步添加代码以找出根本原因。

我缓存了
scrollerMode
,因为我同意,它经常调用。之后,我为
RadioGroup
OnCheck
事件制作了
EventListener
。似乎效果更好,但并非总是如此。无论如何,非常感谢!
    public class FiltrationModePopup extends Popup implements AfterCompose, IdSpace {
        private Radiogroup rgScrollerMode;

        @Override
        public void afterCompose() {
            rgScrollerMode = (Radiogroup) getFellow("rgScrollerMode");
            final Button okButton = (Button) getFellow("okButton");
            okButton.addEventListener(Events.ON_CLICK, new SerializableEventListener<Event>() {
                @Override
                public void onEvent(Event event) {
                    System.out.println(rgScrollerMode.getSelectedIndex());
                    close();
                }
            });
            addForward(Events.ON_OK, okButton, Events.ON_CLICK);
        }
    }