GWT-イベント処理

GWTは、JavaAWTまたはSWINGユーザーインターフェイスフレームワークと同様のイベントハンドラモデルを提供します。

  • リスナーインターフェイスは、ウィジェットがイベントをアナウンスするために呼び出す1つ以上のメソッドを定義します。GWTは、考えられるさまざまなイベントに対応するインターフェースのリストを提供します。

  • 特定のタイプのイベントを受信したいクラスは、関連するハンドラーインターフェイスを実装し、それ自体への参照をウィジェットに渡して、一連のイベントをサブスクライブします。

たとえば、 Button クラスは公開します click eventsしたがって、ClickHandlerを実装して処理するクラスを作成する必要がありますclick イベント。

イベントハンドラーインターフェイス

すべてのGWTイベントハンドラーはEventHandlerインターフェースから拡張されており、各ハンドラーには単一の引数を持つ単一のメソッドしかありません。この引数は、常に関連するイベントタイプのオブジェクトです。各eventオブジェクトには、渡されたイベントオブジェクトを操作するためのいくつかのメソッドがあります。たとえば、クリックイベントの場合、ハンドラーを次のように記述する必要があります-

/**
 * create a custom click handler which will call 
 * onClick method when button is clicked.
 */
public class MyClickHandler implements ClickHandler {
   @Override
   public void onClick(ClickEvent event) {
      Window.alert("Hello World!");
   }
}

これで、クリックイベントの受信を希望するクラスはすべて電話をかけます addClickHandler() 次のようにイベントハンドラーを登録するには-

/**
 * create button and attach click handler
 */
Button button = new Button("Click Me!");
button.addClickHandler(new MyClickHandler());

イベントタイプをサポートする各ウィジェットには、HandlerRegistrationaddという形式のメソッドがあります。Fooハンドラ(Fooイベント)ここで Foo Click、Error、KeyPressなどの実際のイベントです。

以下は、重要なGWTイベントハンドラーと関連イベントおよびハンドラー登録方法のリストです-

シニア番号 イベントインターフェース イベントの方法と説明
1 選択ハンドラーの前<I>

void on Before Selection (Before Selection Event<I> event);

BeforeSelectionEventが発生したときに呼び出されます。

2 BlurHandler

void on Blur(Blur Event event);

ブラーイベントが発生したときに呼び出されます。

3 ChangeHandler

void on Change(ChangeEvent event);

変更イベントが発生したときに呼び出されます。

4 ClickHandler

void on Click(ClickEvent event);

ネイティブクリックイベントが発生したときに呼び出されます。

5 CloseHandler <T>

void on Close(CloseEvent<T> event);

CloseEventが発生したときに呼び出されます。

6 コンテキストメニューハンドラ

void on Context Menu(Context Menu Event event);

ネイティブコンテキストメニューイベントが発生したときに呼び出されます。

7 ダブルクリックハンドラー

void on Double Click(Double Click Event event);

ダブルクリックイベントが発生したときに呼び出されます。

8 エラーハンドラ

void on Error(Error Event event);

エラーイベントが発生したときに呼び出されます。

9 フォーカスハンドラー

void on Focus(Focus Event event);

フォーカスイベントが発生したときに呼び出されます。

10 フォームパネル。完全なハンドラーを送信

void on Submit Complete(Form Panel.Submit Complete Event event);

フォームが正常に送信されたときに発生します。

11 FormPanel.SubmitHandler

void on Submit(Form Panel.Submit Event event);

フォームが送信されたときに発生します。

12 キーダウンハンドラー

void on Key Down(Key Down Event event);

KeyDownEventが発生したときに呼び出されます。

13 KeyPressHandler

void on KeyPress(KeyPressEvent event);

KeyPressEventが発生したときに呼び出されます。

14 KeyUpHandler

void on KeyUp(KeyUpEvent event);

KeyUpEventが発生したときに呼び出されます。

15 LoadHandler

void on Load(LoadEvent event);

LoadEventが発生したときに呼び出されます。

16 MouseDownHandler

void on MouseDown(MouseDownEvent event);

MouseDownが起動されたときに呼び出されます。

17 MouseMoveHandler

void on MouseMove(MouseMoveEvent event);

MouseMoveEventが発生したときに呼び出されます。

18 MouseOutHandler

void on MouseOut(MouseOutEvent event);

MouseOutEventが発生したときに呼び出されます。

19 MouseOverHandler

void on MouseOver(MouseOverEvent event);

MouseOverEventが発生したときに呼び出されます。

20 MouseUpHandler

void on MouseUp(MouseUpEvent event);

MouseUpEventが発生したときに呼び出されます。

21 MouseWheelHandler

void on MouseWheel(MouseWheelEvent event);

MouseWheelEventが発生したときに呼び出されます。

22 ResizeHandler

void on Resize(ResizeEvent event);

ウィジェットのサイズが変更されたときに発生します。

23 ScrollHandler

void on Scroll(ScrollEvent event);

ScrollEventが発生したときに呼び出されます。

24 SelectionHandler <I>

void on Selection(SelectionEvent<I> event);

SelectionEventが発生したときに呼び出されます。

25 ValueChangeHandler <I>

void on ValueChange(ValueChangeEvent<I> event);

ValueChangeEventが発生したときに呼び出されます。

26 Window.ClosingHandler

void on WindowClosing(Window.ClosingEvent event);

ブラウザウィンドウが閉じるか、別のサイトに移動する直前に発生します。

27 Window.ScrollHandler

void on WindowScroll(Window.ScrollEvent event);

ブラウザウィンドウがスクロールされたときに発生します。

イベントメソッド

前述のように、各ハンドラーには、イベントオブジェクトを保持する単一の引数を持つ単一のメソッドがあります例:void onClick(ClickEvent event)またはvoid onKeyDown(KeyDownEvent event))ClickEventKeyDownEventなどのイベントオブジェクトには、以下に示す一般的なメソッドがいくつかあります。

シニア番号 方法と説明
1

protected void dispatch(ClickHandler handler) このメソッドは、HandlerManagerによってのみ呼び出される必要があります

2

DomEvent.Type <FooHandler> getAssociatedType() このメソッドは、登録に使用されたタイプを返します Foo イベント。

3

static DomEvent.Type<FooHandler> getType() このメソッドは、に関連付けられたイベントタイプを取得します Foo イベント。

4

public java.lang.Object getSource() このメソッドは、このイベントを最後に発生させたソースを返します。

5

protected final boolean isLive() このメソッドは、イベントがライブであるかどうかを返します。

6

protected void kill() このメソッドはイベントを強制終了します

この例では、の使用法を示す簡単な手順を説明します。 Click イベントと KeyDownGWTでのイベント処理。次の手順に従って、GWTで作成したGWTアプリケーションを更新します-アプリケーションの作成の章-

ステップ 説明
1 GWT-アプリケーションの作成の章で説明されているように、パッケージcom.tutorialspointの下にHelloWorldという名前のプロジェクトを作成します
2 変更HelloWorld.gwt.xmlHelloWorld.cssHelloWorld.htmlHelloWorld.javaは、以下のように説明しました。残りのファイルは変更しないでください。
3 アプリケーションをコンパイルして実行し、実装されたロジックの結果を確認します。

変更されたモジュール記述子の内容は次のとおりです src/com.tutorialspoint/HelloWorld.gwt.xml

<?xml version = "1.0" encoding = "UTF-8"?>
<module rename-to = 'helloworld'>
   <!-- Inherit the core Web Toolkit stuff.                        -->
   <inherits name = 'com.google.gwt.user.User'/>

   <!-- Inherit the default GWT style sheet.                       -->
   <inherits name = 'com.google.gwt.user.theme.clean.Clean'/>

   <!-- Specify the app entry point class.                         -->
   <entry-point class = 'com.tutorialspoint.client.HelloWorld'/>

   <!-- Specify the paths for translatable code                    -->
   <source path = 'client'/>
   <source path = 'shared'/>

</module>

以下は、変更されたスタイルシートファイルの内容です。 war/HelloWorld.css

body {
   text-align: center;
   font-family: verdana, sans-serif;
}

h1 {
   font-size: 2em;
   font-weight: bold;
   color: #777777;
   margin: 40px 0px 70px;
   text-align: center;
}

以下は、変更されたHTMLホストファイルの内容です。 war/HelloWorld.html

<html>
   <head>
      <title>Hello World</title>
      <link rel = "stylesheet" href = "HelloWorld.css"/>
      <script language = "javascript" src = "helloworld/helloworld.nocache.js">
      </script>
   </head>

   <body>
      <h1>Event Handling Demonstration</h1>
      <div id = "gwtContainer"></div>
   </body>
</html>

以下のJavaファイルの内容を見てみましょう src/com.tutorialspoint/HelloWorld.java これは、GWTでのイベント処理の使用法を示します。

package com.tutorialspoint.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyDownEvent;
import com.google.gwt.event.dom.client.KeyDownHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.DecoratorPanel;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;

public class HelloWorld implements EntryPoint {
   public void onModuleLoad() {
      /**
       * create textbox and attach key down handler
       */
      TextBox textBox = new TextBox(); 
      textBox.addKeyDownHandler(new MyKeyDownHandler());

      /*
       * create button and attach click handler
       */
      Button button = new Button("Click Me!");
      button.addClickHandler(new MyClickHandler());

      VerticalPanel panel = new VerticalPanel();
      panel.setSpacing(10);
      panel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
      panel.setSize("300", "100");
      panel.add(textBox);
      panel.add(button);

      DecoratorPanel decoratorPanel = new DecoratorPanel();
      decoratorPanel.add(panel);
      RootPanel.get("gwtContainer").add(decoratorPanel);
   }

   /** 
    * create a custom click handler which will call 
    * onClick method when button is clicked.
    */
   private class MyClickHandler implements ClickHandler {
      @Override
      public void onClick(ClickEvent event) {
         Window.alert("Hello World!");
      }
   }

   /**
    * create a custom key down handler which will call 
    * onKeyDown method when a key is down in textbox.
    */
   private class MyKeyDownHandler implements KeyDownHandler {
      @Override
      public void onKeyDown(KeyDownEvent event) {
         if(event.getNativeKeyCode() == KeyCodes.KEY_ENTER){
            Window.alert(((TextBox)event.getSource()).getValue());
         }
      }
   }
}

すべての変更を行う準備ができたら、GWT-アプリケーションの作成の章で行ったように、アプリケーションをコンパイルして開発モードで実行します。アプリケーションに問題がない場合、次の結果が得られます-