我有一个GWT三个FlowPanel列表,其中包含ui binder中的两个按钮:
<g:FlowPanel>
<g:FlowPanel>
<g:FocusPanel ui:field="buttonA1">...</g:FocusPanel>
<g:FocusPanel ui:field="buttonB1">...</g:FocusPanel>
</g:FlowPanel>
<g:FlowPanel>
<g:FocusPanel ui:field="buttonA2">...</g:FocusPanel>
<g:FocusPanel ui:field="buttonB2">...</g:FocusPanel>
</g:FlowPanel>
<g:FlowPanel>
<g:FocusPanel ui:field="buttonA3">...</g:FocusPanel>
<g:FocusPanel ui:field="buttonB3">...</g:FocusPanel>
</g:FlowPanel>
</g:FlowPanel>
ButtonA1,ButtonA2,ButtonA3共享一个ClickHandler。 ButtonB1,ButtonB2,ButtonB3共享一个ClickHandler。
这里是A按钮的ClickHandler:
ClickHandler clickA = new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
}
});
如果单击其中一个按钮A或B,我如何知道单击处理程序中哪三个FlowPanel组受影响?
答案 0 :(得分:0)
您可以评估事件来源。如果您将点击处理程序添加到那些按钮,那应该是按钮。
按钮有一个名称,按钮elementId也可以被评估,最后但并非最不重要的是,源是按钮本身,因为你在按钮中添加了字段,你可以在按钮之间询问身份
if( ev.getSource() instanceof Button) {
if(buttonA == (Button)ev.getSource()) ...;
...
另一个常见的模式是避免按下什么按钮进行讨论,并为每个按钮提供一个点击处理程序。
@UiHandler("buttonA")
protected void onButtonA(ClickEvent ev) {
....
@UiHandler("buttonB")
protected void onButtonB(ClickEvent ev) {
....
如果动态创建按钮,则可以动态添加处理程序:
buttonA.addClickHandler( new ClickEventHandler() { ...
implement the interface in place
答案 1 :(得分:0)
在按钮之间共享ui处理程序并确定父窗口小部件
//共享按钮之间的点击处理程序
@UiHandler({&#34; buttonA1&#34;&#34; buttonA2&#34;&#34; buttonA3&#34;})
void onClick(ClickEvent e) {
//确定单击了哪个按钮Window.alert(((按钮)e.getSource())的getText());
//determine the parent widget Widget w=(Button)e.getSource()).getParent(); }