地図レイヤー・ツリー

このレイヤー・ツリー・モデルは、マネージャーに追加した 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
       }
}
例えば、 IlvMapLayerTreeModelclearAllObjects メソッドは、検出されたレイヤーごとに removeAllObjects を呼び出します。