このレイヤー・ツリー・モデルは、マネージャーに追加した IlvMapLayer の順序およびスタイル継承を制御します。このモデルは、地図保存時に保存される永続的データでもあります。
このセクションで説明されているコードをすべて含む マップ・ビルダー のデモ用ソース・コードについては、
<installdir>
/jviews-maps89/samples/mapbuilder/index.html をご覧ください。
地図レイヤー・ツリー・モデルへのアクセス
レイヤー・ツリー・モデルには、以下を呼び出してアクセスできます。
IlvMapLayerTreeModel ltm = IlvMapLayerTreeProperty.GetMapLayerTreeModel(manager);
地図レイヤー・ツリーの制御
IlvLayerTree Bean をアプリケーションに追加することで、ユーザーが個々のレイヤー・スタイルを編集し制御できるようになります。「GUI Bean の使用」を参照してください。
通常、アプリケーションは addChild メソッドでレイヤーを追加するか、レイヤー・モデルの removeChild メソッドでこれらを削除する必要があるだけです。
レイヤー編成の変更を通知するリスナーの追加
地図ツリー・モデルは
DefaultTreeModel
のサブクラスで、レイヤー編成での変更を通知するために TreeModelListener
をアプリケーションに追加することができます。ツリー構造の変更を通知するリスナーの追加
IlvMapLayerTreeProperty もマネージャーの名前付きプロパティーなので、全体のツリー構造が変更されたときに、常に呼び出されるリスナーを追加することができます。次に例を示します。
manager.addNamedPropertyListener(new NamedPropertyListener() { public void propertyChanged(NamedPropertyEvent event) { if (event.getPropertyName().equals(IlvMapLayerTreeProperty.NAME)) { IlvMapLayerTreeProperty p = (IlvMapLayerTreeProperty) event.getNewValue(); if (event.getType() == NamedPropertyEvent.PROPERTY_SET) { ...do something } } } });
すべてのレイヤーへのコードの追加
アプリケーションがすべてのレイヤーにあるコード断片を適用させる必要がある場合、ツリーの深さにかかわらず、以下のようなツリー・モデルの getEnumeration メソッドを呼び出す必要があります。
Enumeration e = ltm.getEnumeration(); while(e.hasMoreElements()) { Object o = e.nextElement(); if(o instanceof IlvMapLayerTreeNode) { IlvMapLayer layer = (IlvMapLayer)((IlvMapLayerTreeNode)o).getUserObject(); ... act on the layer } }