Eventos

Depois de criarmos uma exibição e alguns widgets, e termos inicializado o loop de mensagem do aplicativo, onde acontece o trabalho real? Ele acontece toda vez que um evento é lido na fila e é feito o dispatch dele para um widget. A maior parte da lógica do aplicativo é implementada como respostas a eventos do usuário.

O padrão básico é adicionar um atendente em algum widget que você criou, e quando o evento apropriado ocorrer o código do atendente será executado. Esse exemplo simples é adaptado de org.eclipse.swt.examples.helloworld.HelloWorld3:

   Display display = new Display ();
   Shell shell = new Shell (display);
   Label label = new Label (shell, SWT.CENTER);
   ...
   shell.addControlListener (new ControlAdapter () {
      public void controlResized (ControlEvent e) {
         label.setBounds (shell.getClientArea ());
      }
   });

Para cada tipo de atendente, há uma interface que define o atendente (XyzListener), uma classe que fornece informações sobre o evento (XyzEvent) e um método de API para adicionar o atendente (addXyzListener).  Se houver mais de um método definido na interface do atendente, um adaptador (XyzAdapter) que implementa a interface do atendente e fornece métodos vazios também será fornecido.Todos os eventos, ouvintes e adaptadores estão definidos no pacote org.eclipse.swt.events.

A tabela a seguir resume os eventos que estão disponíveis e os widgets que suportam cada evento.

Tipo de Evento

Descrição

Widgets

Arm

Gerado quando um widget, como um item de menu, é montado.

MenuItem

Control

Gerado quando um controle é movido ou redimensionado.

Control, TableColumn, Tracker

Dispose

Gerado quando um widget é descartado, de forma programática ou pelo usuário.

Widget

Focus

Gerado quando um controle ganha ou perde foco.

Control

Help

Gerado quando o usuário solicita ajuda ao widget, como ao pressionar a tecla F1.

Control, Menu, MenuItem

Key

Gerado quando o usuário pressiona ou libera a tecla do teclado, quando o controle tem foco no teclado.

Control

Menu

Gerado quando um menu está oculto ou está sendo mostrado.

Menu

Modify

Gerado quando o texto de um widget é modificado.

CCombo, Combo, Text, StyledText

Mouse

Gerado quando o usuário pressiona, libera ou clica duas vezes com o mouse sobre o controle.

Control

MouseMove

Gerado conforme o usuário move o mouse pelo controle.

Control

MouseTrack

Gerado quando o mouse entra, sai ou pára sobre o controle.

Control

Paint

Gerado quando o controle precisa ser repintado.

Control

Selection

Gerado quando o usuário seleciona um item no controle.

Button, CCombo, Combo, CoolItem, CTabFolder, List, MenuItem, Sash, Scale, ScrollBar, Slider, StyledText, TabFolder, Table, Table CursorTableColumn, TableTree, Text, ToolItem, Tree

Shell

Gerado quando um shell é minimizado, maximizado, ativado, desativado ou fechado.

Shell

Traverse

Gerado quando um controle é desviado pelo usuário utilizando pressionamentos de teclas.

Control

Tree

Gerado quando o usuário expande ou reduz itens na árvore.

Tree, TableTree

Verify

Gerado quando o texto de um widget está para ser modificado. Dá ao aplicativo a chance de alterar o texto ou evitar a modificação.

Text, StyledText

Eventos não digitados

O sistema de evento digitado descrito acima é implementado com um mecanismo de evento do widget de baixo nível e não digitado. Esse mecanismo não é para ser utilizado pelos aplicativos, mas você o verá sendo utilizado dentro da implementação do SWT. Ele é também utilizado em muitas implementações de página do assistente do workbench.

O mecanismo sem tipo conta com uma constante para identificar o tipo do evento e define um atendente genérico que é fornecido com essa constante. Isso permite ao ouvinte implementar um ouvinte "estilo case". No fragmento a seguir, definimos um identificador de evento genérico e incluímos vários ouvintes em um shell.

   Shell shell = new Shell ();
   Listener listener = new Listener () {
      public void handleEvent (Event e) {
         switch (e.type) {
            case SWT.Resize:
               System.out.println ("Redimensionamento recebido");
               break;
            case SWT.Paint:
               System.out.println ("Desenho recebido");
               break;
            default:
               System.out.println("Evento desconhecido recebido");
         }
      }
   };
   shell.addListener (SWT.Resize, listener);
   shell.addListener (SWT.Paint, listener);

Copyright IBM Corporation e outros 2000, 2003.