甲府方重信Blog

...Shigenobu Koufugatas Blog

  • Increase font size
  • Default font size
  • Decrease font size
Error
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
Home 業務日誌 Adaプログラミング Adaチュートリアル セクション16.6 - より大きなAdaアプレット

Adaチュートリアル セクション16.6 - より大きなAdaアプレット

E-mail Print PDF

セクション 16.6 - より大きなAdaアプレット

「Doodle」という名前の、少し大きなアプレットをどのように作っていくかを見ていきましょう。このアプレットは、ユーザーにウィンドウの中にシンプルなフリーハンドドローイングを提供し、マウスボタンを押し続けることによって描画することができます。

「mouseDown」イベントが起きると、私たちはスクリーン上のどこでそれが起きたかを記憶しておく必要があります。 「mouseDrag」イベントが起きると、私たちは最後の画面位置から現在の画面位置への直線を描画する必要があります。これは、走り書きを許すのには十分かもしれませんが、いたずら書きをする領域がスクロールした場合や、ウィンドウが上に移動した場合に、走り書きがなくなるということがあります。そこで、線の開始点と終了点を保存しましょう。そうすれば、私たちは後で「paint」メソッドにおいて再描画することができます。私たちは、「Vector」と呼ばれるJavaの型で、開始点と終了点のリストを格納することができます。これらのベクターを設定するためには、私たちはアプレットの「init」メソッドを使用することになります。私たちは、「Point」と呼ばれるJavaの型を使うこともできます。これは単に、X座標とY座標の組み合わせを格納します。

多くのJavaのライブラリークラスは、コンストラクターと呼ばれる特別なメソッドを持っています。コンストラクターは、オブジェクトの新しいインスタンスを作成します。 Java言語においては、そのクラスと正確に同じ名前をもつメソッドはすべて、コンストラクターです。これらのコンストラクターは、Adaによって呼び出すことが可能です。これらのAda関数の名前は、単に、「new_」にそのクラスの名前が続いたものです。例えば、Vectorクラスは二つの整数型パラメーターを取るVectorという名前のメソッドを持っています。このクラスと、メソッド名は、同一ですので、これは新しいVectorを作成するためのコンストラクターでなければなりません。Adaからこのコンストラクターを利用するには、「new_Vector」と二つの引数をつけて呼び出します。サンプルコードでは、この引数は(1)いくつのVectorを初期化すべきか、(2)Vectorが空間を消費する毎回、増加する点の数、です。私はVectorに100ポイントを格納し、現在の制限を超えるごとに毎回別の100ポイントの空間を追加するよう設定しました。他の静的でないメソッドと異なり、リストの前に別の引数を加えること - 新しいオブジェクトを作成するためのコンストラクター、はしません。そこで引き渡されるものは何もありません。

ここで、Doodleのソースコードを掲載します。プログラマーは、Javaプログラムの開発を計画するまでは、これを注意深く学習する必要はありません。しかし、どのように物事がなされているかを少なくとも見て、すくいとる必要があります。:

 

-- "Doodle" by David A. Wheeler

with java.applet.Applet; use java.applet.Applet;
with java.awt.Graphics; use java.awt.Graphics;
with java.awt.Event; use java.awt.Event;
with java.util.Vector; use java.util.Vector;

package Doodle is
  type Doodle_Obj is new Applet_Obj with private;
  type Doodle_Ptr is access all Doodle_Obj'Class;

  procedure init(Obj : access Doodle_Obj);
  function  mouseDown(Obj : access Doodle_Obj; e : Event_Ptr;
                      x : Integer ; y : Integer) return Boolean;
  function  mouseDrag(Obj : access Doodle_Obj; evt : Event_Ptr;
                      x : Integer ; y : Integer) return Boolean;
  procedure paint(Obj : access Doodle_Obj; g : Graphics_Ptr);

private
  type Doodle_Obj is new Applet_Obj with record
     -- Last position drawn:
     Last_X, Last_Y  : Integer := 0;
     -- Store all lines drawn so they can be redrawn:
     Starting_Points, Ending_Points : Vector_Ptr := null;
  end record;
end Doodle;



with interfaces.Java;  use interfaces.Java; -- for "+" on strings
with java.awt.Point; use java.awt.Point;
with java.lang; use java.lang;  -- Defines "Object"

package body Doodle is

  procedure init(Obj : access Doodle_Obj) is
  begin
    -- Initialize applet by setting up vector of start and end points.
    Obj.Starting_Points := new_Vector(100, 100); -- Constructor.
    Obj.Ending_Points   := new_Vector(100, 100);
  end init;

  function mouseDown(Obj : access Doodle_Obj; e : Event_Ptr;
                     x : Integer ; y : Integer) return Boolean is
    -- Memorize where the button was pressed for later use.
  begin
    Obj.Last_X := X;
    Obj.Last_Y := Y;
    return True;  -- "true" means we've handled mouseDown.
  end mouseDown;

  function mouseDrag(Obj : access Doodle_Obj; evt : Event_Ptr;
                     x : Integer ; y : Integer) return Boolean is
    Graphic_Image      : Graphics_Ptr := getGraphics(Obj);
    Starting_Point : Point_Ptr := new_Point(Obj.Last_X, Obj.Last_Y);
    Ending_Point   : Point_Ptr := new_Point(x, y);
    -- Draw a line from last to current point, then store information.
  begin
    drawLine(Graphic_Image, Obj.Last_X, Obj.Last_Y, x, y);
    -- Store the ending position in case the dragging continues.
    Obj.Last_X := x;
    Obj.Last_Y := y;
    -- Store the line drawn so it can be repainted.
    addElement(Obj.Starting_Points, Object_Ptr(Starting_Point));
    addElement(Obj.Ending_Points,   Object_Ptr(Ending_Point));
    return True;  -- "true" means we've handled mouseDrag.
  end mouseDrag;

  procedure paint(Obj : access Doodle_Obj; g : Graphics_Ptr) is
    Starting_Point, Ending_Point : Point_Ptr := null;
      -- Redraw the doodling.
  begin
    for I in 0 .. size(Obj.Starting_Points) - 1 loop
      Starting_Point := Point_Ptr(elementAt(Obj.Starting_Points, I));
      Ending_Point   := Point_Ptr(elementAt(Obj.Ending_Points, I));
      drawLine(g, Starting_Point.x, Starting_Point.y,
                  Ending_Point.x, Ending_Point.y);
    end loop;
  end paint;

end Doodle;

もしプログラマーが興味が沸き、Javaに対応しているブラウザーを持っているならば、アプレットを試してみることができます。

出典: http://www.adahome.com/Tutorials/Lovelace/s16s6.htm

Last Updated on Monday, 27 August 2012 04:09  

ニュース速報

とりあえず、「改訂第二版 CentOSサーバー構築バイブル」の12章にCentOSでのSELinuxの設定方法について記述がある。

一般的に、使い込むうちに覚えるものだと思うが、この本だけだと、仕組みについてはよくわからない。

2004年頃の書物なら出版されているのだが、もう中古でないと手に入らない模様。