Pregunta

Parece que no puedo encontrar ninguna documentación sobre qué eventos se activan y cuándo en GXT.

Los documentos API tienen listas de todos los eventos que podrían activarse (en Events).Y describe cómo manejar los eventos que detecta.Pero me interesa el lado opuesto, qué eventos se desencadenan cuando realizo una determinada acción.

Puedo configurar algunos oyentes para varios componentes diferentes, o puedo usar addListener con un código de evento específico para capturar eventos individuales.Eso es irregular y parece que estoy usando prueba y error para adivinar qué es lo que podría querer capturar.

¿Hay alguna manera de registrar todos los eventos que se activan?¿O capturarlos todos para poder verlos en un depurador?

¿O me falta alguna documentación que tenga la información?Algo como "cuando haces clic en un widget, aparece un ButtonEvent Está despedido. Events.x se dispara en el aire, Events.y en el clic."

¿Fue útil?

Solución 2

Terminé usando la fuerza bruta: creó un mapa de EventType y el nombre, a continuación, adjuntar un oyente para cada tipo de evento que el componente podría recibir. Entonces me acaba de establecer un punto de interrupción en el interior del oyente, y pude ver qué eventos fueron recibidos cuando ocurría algo.

Si no hubiera sido código de usar y tirar, habría limpiado en una clase de utilidad, no se utiliza una clase de escucha anónima, etc.

    final Map<EventType, String> eventTypeNames = new HashMap<EventType, String>();
    eventTypeNames.put(Events.BeforeExpand, "BeforeExpand");
    eventTypeNames.put(Events.Expand, "Expand");
    ...
    eventTypeNames.put(Events.BeforeStateSave, "BeforeStateSave");
    eventTypeNames.put(Events.StateSave, "StateSave");

    for (EventType eventType : Arrays.asList(
            Events.BeforeExpand,
            Events.Expand,
            ...
            Events.BeforeStateSave,
            Events.StateSave
    )) {
        this.addListener(eventType, new Listener<BaseEvent>() {
            public void handleEvent(final BaseEvent be) {
                String type = eventTypeNames.get(be.getType());
                String ev = be.toString();
            }
        });
    }

Otros consejos

Tal vez alguien va a encontrar esta clase de utilidad, he creado útil para ver qué tipo de eventos se ha resucitado. La idea, por supuesto, fue propuesto en respuesta aceptada.

import java.util.HashMap;
import java.util.Map;

import com.extjs.gxt.ui.client.event.BaseEvent;
import com.extjs.gxt.ui.client.event.EventType;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.widget.Component;

/**
 * Class for debugging purposes. Sometimes it is hard to tell what type of event
 * is invoked and when. During debug process you can just do:
 * 
 * EventUtils.attachDebugListeners(c);
 * EventUtils.attachDebugListeners(c, "NAME");
 * 
 * You'll then get information about events as they are invoked.
 * 
 * List of events copied from {@link Events} class.
 * 
 */
public class EventUtils {

    public static void attachDebugListeners(final Component c) {
        attachDebugListeners(c, null);
    }

    public static void attachDebugListeners(final Component c, final String msg) {
        for (final EventType type : eventTypeNames.keySet()) {
            c.addListener(type, new Listener<BaseEvent>() {
                @Override
                public void handleEvent(BaseEvent be) {
                    String typeName = eventTypeNames.get(type);
                    if (msg != null)
                        System.out.print(msg + " -> ");
                    System.out.println(typeName);
                }
            });
        }
    }

    final static Map<EventType, String> eventTypeNames = new HashMap<EventType, String>();
    static {
        eventTypeNames.put(Events.Activate, "Events.Activate");
        eventTypeNames.put(Events.Add, "Events.Add");
        eventTypeNames.put(Events.Adopt, "Events.Adopt");
        eventTypeNames.put(Events.AfterEdit, "Events.AfterEdit");
        eventTypeNames.put(Events.AfterLayout, "Events.AfterLayout");
        eventTypeNames.put(Events.ArrowClick, "Events.ArrowClick");
        eventTypeNames.put(Events.Attach, "Events.Attach");
        eventTypeNames.put(Events.AutoHide, "Events.AutoHide");
        eventTypeNames.put(Events.BeforeAdd, "Events.BeforeAdd");
        eventTypeNames.put(Events.BeforeAdopt, "Events.BeforeAdopt");
        eventTypeNames.put(Events.BeforeBind, "Events.BeforeBind");
        eventTypeNames.put(Events.BeforeCancelEdit, "Events.BeforeCancelEdit");
        eventTypeNames.put(Events.BeforeChange, "Events.BeforeChange");
        eventTypeNames
                .put(Events.BeforeCheckChange, "Events.BeforeCheckChange");
        eventTypeNames.put(Events.BeforeClose, "Events.BeforeClose");
        eventTypeNames.put(Events.BeforeCollapse, "Events.BeforeCollapse");
        eventTypeNames.put(Events.BeforeComplete, "Events.BeforeComplete");
        eventTypeNames.put(Events.BeforeEdit, "Events.BeforeEdit");
        eventTypeNames.put(Events.BeforeExpand, "Events.BeforeExpand");
        eventTypeNames.put(Events.BeforeHide, "Events.BeforeHide");
        eventTypeNames.put(Events.BeforeLayout, "Events.BeforeLayout");
        eventTypeNames.put(Events.BeforeOpen, "Events.BeforeOpen");
        eventTypeNames.put(Events.BeforeOrphan, "Events.BeforeOrphan");
        eventTypeNames.put(Events.BeforeQuery, "Events.BeforeQuery");
        eventTypeNames.put(Events.BeforeRemove, "Events.BeforeRemove");
        eventTypeNames.put(Events.BeforeRender, "Events.BeforeRender");
        eventTypeNames.put(Events.BeforeSelect, "Events.BeforeSelect");
        eventTypeNames.put(Events.BeforeShow, "Events.BeforeShow");
        eventTypeNames.put(Events.BeforeStartEdit, "Events.BeforeStartEdit");
        eventTypeNames.put(Events.BeforeStateRestore,
                "Events.BeforeStateRestore");
        eventTypeNames.put(Events.BeforeStateSave, "Events.BeforeStateSave");
        eventTypeNames.put(Events.BeforeSubmit, "Events.BeforeSubmit");
        eventTypeNames.put(Events.Bind, "Events.Bind");
        eventTypeNames.put(Events.Blur, "Events.Blur");
        eventTypeNames.put(Events.BodyScroll, "Events.BodyScroll");
        eventTypeNames.put(Events.BrowserEvent, "Events.BrowserEvent");
        eventTypeNames.put(Events.CancelEdit, "Events.CancelEdit");
        eventTypeNames.put(Events.CellClick, "Events.CellClick");
        eventTypeNames.put(Events.CellDoubleClick, "Events.CellDoubleClick");
        eventTypeNames.put(Events.CellMouseDown, "Events.CellMouseDown");
        eventTypeNames.put(Events.CellMouseUp, "Events.CellMouseUp");
        eventTypeNames.put(Events.Change, "Events.Change");
        eventTypeNames.put(Events.CheckChange, "Events.CheckChange");
        eventTypeNames.put(Events.CheckChanged, "Events.CheckChanged");
        eventTypeNames.put(Events.Clear, "Events.Clear");
        eventTypeNames.put(Events.Close, "Events.Close");
        eventTypeNames.put(Events.Collapse, "Events.Collapse");
        eventTypeNames.put(Events.ColumnClick, "Events.ColumnClick");
        eventTypeNames.put(Events.ColumnResize, "Events.ColumnResize");
        eventTypeNames.put(Events.Complete, "Events.Complete");
        eventTypeNames.put(Events.ContextMenu, "Events.ContextMenu");
        eventTypeNames.put(Events.Deactivate, "Events.Deactivate");
        eventTypeNames.put(Events.Detach, "Events.Detach");
        eventTypeNames.put(Events.Disable, "Events.Disable");
        eventTypeNames.put(Events.DoubleClick, "Events.DoubleClick");
        eventTypeNames.put(Events.DragCancel, "Events.DragCancel");
        eventTypeNames.put(Events.DragEnd, "Events.DragEnd");
        eventTypeNames.put(Events.DragEnter, "Events.DragEnter");
        eventTypeNames.put(Events.DragFail, "Events.DragFail");
        eventTypeNames.put(Events.DragLeave, "Events.DragLeave");
        eventTypeNames.put(Events.DragMove, "Events.DragMove");
        eventTypeNames.put(Events.DragStart, "Events.DragStart");
        eventTypeNames.put(Events.Drop, "Events.Drop");
        eventTypeNames.put(Events.EffectCancel, "Events.EffectCancel");
        eventTypeNames.put(Events.EffectComplete, "Events.EffectComplete");
        eventTypeNames.put(Events.EffectStart, "Events.EffectStart");
        eventTypeNames.put(Events.Enable, "Events.Enable");
        eventTypeNames.put(Events.Exception, "Events.Exception");
        eventTypeNames.put(Events.Expand, "Events.Expand");
        eventTypeNames.put(Events.Focus, "Events.Focus");
        eventTypeNames.put(Events.HeaderChange, "Events.HeaderChange");
        eventTypeNames.put(Events.HeaderClick, "Events.HeaderClick");
        eventTypeNames
                .put(Events.HeaderContextMenu, "Events.HeaderContextMenu");
        eventTypeNames
                .put(Events.HeaderDoubleClick, "Events.HeaderDoubleClick");
        eventTypeNames.put(Events.HeaderMouseDown, "Events.HeaderMouseDown");
        eventTypeNames.put(Events.HiddenChange, "Events.HiddenChange");
        eventTypeNames.put(Events.Hide, "Events.Hide");
        eventTypeNames.put(Events.Invalid, "Events.Invalid");
        eventTypeNames.put(Events.KeyDown, "Events.KeyDown");
        eventTypeNames.put(Events.KeyPress, "Events.KeyPress");
        eventTypeNames.put(Events.KeyUp, "Events.KeyUp");
        eventTypeNames.put(Events.LiveGridViewUpdate,
                "Events.LiveGridViewUpdate");
        eventTypeNames.put(Events.Maximize, "Events.Maximize");
        eventTypeNames.put(Events.MenuHide, "Events.MenuHide");
        eventTypeNames.put(Events.MenuShow, "Events.MenuShow");
        eventTypeNames.put(Events.Minimize, "Events.Minimize");
        eventTypeNames.put(Events.Move, "Events.Move");
        eventTypeNames.put(Events.OnBlur, "Events.OnBlur");
        eventTypeNames.put(Events.OnChange, "Events.OnChange");
        eventTypeNames.put(Events.OnClick, "Events.OnClick");
        eventTypeNames.put(Events.OnContextMenu, "Events.OnContextMenu");
        eventTypeNames.put(Events.OnDoubleClick, "Events.OnDoubleClick");
        eventTypeNames.put(Events.OnError, "Events.OnError");
        eventTypeNames.put(Events.OnFocus, "Events.OnFocus");
        eventTypeNames.put(Events.OnKeyDown, "Events.OnKeyDown");
        eventTypeNames.put(Events.OnKeyPress, "Events.OnKeyPress");
        eventTypeNames.put(Events.OnKeyUp, "Events.OnKeyUp");
        eventTypeNames.put(Events.OnLoad, "Events.OnLoad");
        eventTypeNames.put(Events.OnLoseCapture, "Events.OnLoseCapture");
        eventTypeNames.put(Events.OnMouseDown, "Events.OnMouseDown");
        eventTypeNames.put(Events.OnMouseMove, "Events.OnMouseMove");
        eventTypeNames.put(Events.OnMouseOut, "Events.OnMouseOut");
        eventTypeNames.put(Events.OnMouseOver, "Events.OnMouseOver");
        eventTypeNames.put(Events.OnMouseUp, "Events.OnMouseUp");
        eventTypeNames.put(Events.OnMouseWheel, "Events.OnMouseWheel");
        eventTypeNames.put(Events.OnScroll, "Events.OnScroll");
        eventTypeNames.put(Events.Open, "Events.Open");
        eventTypeNames.put(Events.Orphan, "Events.Orphan");
        eventTypeNames.put(Events.Ready, "Events.Ready");
        eventTypeNames.put(Events.Refresh, "Events.Refresh");
        eventTypeNames.put(Events.Register, "Events.Register");
        eventTypeNames.put(Events.Remove, "Events.Remove");
        eventTypeNames.put(Events.Render, "Events.Render");
        eventTypeNames.put(Events.Resize, "Events.Resize");
        eventTypeNames.put(Events.ResizeEnd, "Events.ResizeEnd");
        eventTypeNames.put(Events.ResizeStart, "Events.ResizeStart");
        eventTypeNames.put(Events.Restore, "Events.Restore");
        eventTypeNames.put(Events.RowClick, "Events.RowClick");
        eventTypeNames.put(Events.RowDoubleClick, "Events.RowDoubleClick");
        eventTypeNames.put(Events.RowMouseDown, "Events.RowMouseDown");
        eventTypeNames.put(Events.RowMouseUp, "Events.RowMouseUp");
        eventTypeNames.put(Events.RowUpdated, "Events.RowUpdated");
        eventTypeNames.put(Events.Scroll, "Events.Scroll");
        eventTypeNames.put(Events.Select, "Events.Select");
        eventTypeNames.put(Events.SelectionChange, "Events.SelectionChange");
        eventTypeNames.put(Events.Show, "Events.Show");
        eventTypeNames.put(Events.SortChange, "Events.SortChange");
        eventTypeNames.put(Events.SpecialKey, "Events.SpecialKey");
        eventTypeNames.put(Events.StartEdit, "Events.StartEdit");
        eventTypeNames.put(Events.StateChange, "Events.StateChange");
        eventTypeNames.put(Events.StateRestore, "Events.StateRestore");
        eventTypeNames.put(Events.StateSave, "Events.StateSave");
        eventTypeNames.put(Events.Submit, "Events.Submit");
        eventTypeNames.put(Events.Toggle, "Events.Toggle");
        eventTypeNames.put(Events.TriggerClick, "Events.TriggerClick");
        eventTypeNames.put(Events.TwinTriggerClick, "Events.TwinTriggerClick");
        eventTypeNames.put(Events.UnBind, "Events.UnBind");
        eventTypeNames.put(Events.Unregister, "Events.Unregister");
        eventTypeNames.put(Events.Update, "Events.Update");
        eventTypeNames.put(Events.Valid, "Events.Valid");
        eventTypeNames.put(Events.ValidateDrop, "Events.ValidateDrop");
        eventTypeNames.put(Events.ValidateEdit, "Events.ValidateEdit");
        eventTypeNames.put(Events.ViewReady, "Events.ViewReady");
    }
}

Los documentos API para los distintos widgets describen qué eventos se activarán y cuándo se activarán.Por ejemplo, digamos que queremos realizar una acción cada vez que un usuario elige una nueva TabItem en un TabPanel.

TabPanelLa documentación API (ubicada en http://extjs.com/deploy/gxtdocs/com/extjs/gxt/ui/client/widget/TabPanel.html) muestra varios eventos;estamos interesados ​​en Select:

Seleccionar :TabPanelEvent(contenedor, artículo)

Se activa después de seleccionar un elemento.

  • envase :este
  • artículo :el elemento que fue seleccionado

Entonces, para capturar el evento (que parece que entiendes, pero lo incluiré para completar) el proceso es agregar un oyente al TabPanel, observando específicamente el Events.Select evento:

tp.addListener(Events.Select, new Listener<TabPanelEvent>(){
  public void handleEvent(TabPanelEvent be)
  {
    MessageBox.alert("Test", be.item.getText(), null);
  }
});

Tenga en cuenta que muchos eventos tienen una propiedad llamada doit que puede establecer en falso para cancelar el evento.

Una lista de códigos completa:

package edu.fresno.client;

import com.extjs.gxt.ui.client.Events;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.event.TabPanelEvent;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.MessageBox;
import com.extjs.gxt.ui.client.widget.TabItem;
import com.extjs.gxt.ui.client.widget.TabPanel;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.ui.RootPanel;

public class GWTSandbox implements EntryPoint {
  public void onModuleLoad() {

      TabPanel tp = new TabPanel();

      TabItem ti1 = new TabItem("TabItem1");
      TabItem ti2 = new TabItem("TabItem2");

      tp.add(ti1);
      tp.add(ti2);

      tp.addListener(Events.Select, new Listener<TabPanelEvent>(){
            public void handleEvent(TabPanelEvent be)
            {
                MessageBox.alert("Test", be.item.getText(), null);
            }
      });


      ContentPanel panel = new ContentPanel();
      panel.setLayout(new FitLayout());
      panel.add(tp);
      RootPanel.get().add(panel);

  }
}

Se podría añadir siguiente código para el constructor:

    ContentPanel  panel =new ContentPanel(){
      public boolean fireEvent(EventType type) {
          System.out.println(type.getEventCode());
          return super.fireEvent(type);
      }
      public boolean fireEvent(EventType eventType, BaseEvent be) {
          System.out.println(eventType.getEventCode());
          return super.fireEvent(eventType, be);
      }
      public boolean fireEvent(EventType type, ComponentEvent ce) {
          System.out.println(type.getEventCode());
          return super.fireEvent(type, ce);
      }
    };

A continuación, se imprimirá todo caso, este componente puede recibir.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top