如何获取点击列表项的列表索引?
How to get List index of tapped List item?
我有一个 GWT 三个 FlowPanel 的列表,其中每个在 ui 活页夹中包含两个按钮:
<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 组中的哪一个受到影响?
您可以评估事件源。如果您向这些按钮添加了点击处理程序,那应该是按钮。
按钮有名称,按钮的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
在按钮之间共享 ui 处理程序并确定父窗口小部件
//share the click handlers between buttons
@UiHandler({"buttonA1","buttonA2","buttonA3"})
void onClick(ClickEvent e)
{
//determine which button is clicked
Window.alert(((Button)e.getSource()).getText());
//determine the parent widget
Widget w=(Button)e.getSource()).getParent();
}
我有一个 GWT 三个 FlowPanel 的列表,其中每个在 ui 活页夹中包含两个按钮:
<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 组中的哪一个受到影响?
您可以评估事件源。如果您向这些按钮添加了点击处理程序,那应该是按钮。
按钮有名称,按钮的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
在按钮之间共享 ui 处理程序并确定父窗口小部件
//share the click handlers between buttons
@UiHandler({"buttonA1","buttonA2","buttonA3"})
void onClick(ClickEvent e) {
//determine which button is clickedWindow.alert(((Button)e.getSource()).getText());
//determine the parent widget Widget w=(Button)e.getSource()).getParent(); }