4 番目の手順である Sample4.java ファイル (
<installdir>
/jviews-framework89/codefragments/getstart/index.html を参照) は、Sample3 ファイルを拡張したものです。Sample4.java ファイルをコンパイルし、前の例の場合と同じように実行します。「例の実行」を参照してください。
![sample4.png](../../JViews_Framework/usressfwork/_media/sample4_default.png)
サンプル 4 の実行
グラフィック・オブジェクトの追加
グラフィック・オブジェクトを操作できるようにするには、まずグラフィック・オブジェクトがある Rogue Wave® JViews パッケージをインポートする必要があります。
import ilog.views.graphic.*;
この例では、 IlvIcon クラスの 10 個のオブジェクトをマネージャーに追加する
addObjects
メソッドを実装します。public void addObjects() { manager.setSelectable(0, false); for (int i = 0 ; i < 10 ; i++) { IlvGraphic obj = new IlvIcon("image.gif", new IlvRect(0,0,37,38)); manager.addObject(obj, 1, false); } }
このメソッドの最初の行は、パラメーターが
0
と false
のマネージャーの setSelectable
メソッドを呼び出します。manager.setSelectable(0, false);
最初のパラメーター
0
は、メソッドを適用するマネージャーのレイヤーを指定します。2 番目のパラメーター false
は、最初のパラメーターとしてパスされたレイヤーのオブジェクトが選択可能 (true
) か否か (false
) を指定します。マネージャーのオブジェクトは別々のレイヤーに格納でき、インデックス別に識別されます。レイヤーはインデックス 0 から始まり、それぞれの上に描画されます。最初のレイヤーにはインデックス 0 が、2 番目のレイヤーにはインデックス 1 がというように割り当てられ、上位画面レイヤーに格納されたオブジェクトは、下位レイヤーのオブジェクトの前に表示されます。
マネージャーに読み込まれた
lou.ivl
ファイルでは、絵を構成するオブジェクトはレイヤー 0
に格納されます。パラメーターとして 0
と false
を使用した setSelectable
メソッドの呼び出しは、絵 (レイヤー 0
) の選択が不可能で、そのため変更も不可能であることを指定します。次の
addObject
メソッドは、IlvIcon
オブジェクトをマネージャーのレイヤー 1 に追加します。manager.addObject(obj, 1, false);
アプリケーション開始メソッドから
addObjects()
メソッドを呼び出します。この場合、Sample4
メソッドです。メモ
このメソッドの
false
パラメーターは、再描画がトリガーされないことを指定します。このコードが実行されるときアプリケーションは表示されないため、ここでは再描画は必要ありません。マウスでオブジェクトをクリックし、アプリケーションのインターフェースをテストします。絵の選択または変更はできませんが、新規のオブジェクトは選択可能であることがわかります。
グラフィック・オブジェクトの移動
Button moveButton = new Button("move"); moveButton.setBackground(Color.gray); moveButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { moveObjects(); } }); buttons.add(moveButton); }
オブジェクトの移動は、
Sample4.moveObjects
() メソッドで実装されます。このメソッドはレイヤー 1 に含まれる列挙オブジェクト (新規オブジェクト) を取得し、これらの各オブジェクトに対してレイヤー 0 のオブジェクトをランダム検索し、 IlvManager を呼び出して、レイヤー 1 のオブジェクトをレイヤー 0 のオブジェクトの中央に移動します。void moveObjects() { IlvGraphic state=null, obj=null; // get objects in layer 1 IlvGraphicEnumeration objects, states; for (objects = manager.getObjects(1); objects.hasMoreElements();) { obj = objects.nextElement(); // get an random object in layer 0 states = manager.getObjects(0); int index = (int)((double)manager.getCardinal(0)*Math.random()); state = states.nextElement(); for (int i = 1 ; i < index; i++) state = states.nextElement(); if (state != null) { // move the object. IlvRect bbox = state.boundingBox(null); manager.moveObject(obj, bbox.x+bbox.width/2, bbox.y+bbox.height/2, true); } } }