マネージャーの選択変更についての通知を受け取るには、 ManagerSelectionListener インターフェースをクラスで実装する必要があります。このインターフェースに含まれるのは
selectionChanged
メソッドのみで、これはオブジェクトが選択または選択解除されるたびに呼び出されます。void selectionChanged(ManagerSelectionChangedEvent event)
選択と選択解除についての通知を受け取るには、
IlvManager
クラスの次のメソッドでクラスそれ自体を登録する必要があります。void addManagerSelectionListener(ManagerSelectionListener l)
selectionChanged
メソッドは、オブジェクトが選択または選択解除された直後に呼び出されるため、選択か選択解除かは簡単に判断できます。これは、次のように行います。class MyListener implements ManagerSelectionListener { public void selectionChanged(ManagerSelectionChangedEvent event) { // retrieve the graphic object IlvGraphic obj = event.getGraphic(); IlvManager manager = event.getManager(); if (manager.isSelected(obj)) { // object was selected } else { // object was deselected } } }
マネージャーの
selectAll
メソッドの呼び出しの結果として、多くのオブジェクトが選択されている場合は、選択リスナーに多くの選択イベントが送信されます。選択が安定している場合は、アクションを実行する必要のあるリスナーにとってはこれだけでは不十分な場合があります。例えば、同時にいくつものオブジェクトが選択されている場合は、指定オブジェクトのプロパティーを表示するプロパティー・インスペクターは、個々の選択について更新する必要はありません。このような問題を解決するために、 ManagerSelectionChangedEvent クラスには次のメソッドがあります。- イベントが一連の選択イベントの一部であるかどうかを示す
isAdjusting
メソッド - イベントが一連の最後のイベントであることを示す
isAdjustmentEnd
メソッド
この例の「プロパティー・インスペクター」の場合、リスナーは次のようになります。
class MyListener implements ManagerSelectionListener { public void selectionChanged(ManagerSelectionChangedEvent event) { if (!event.isAdjusting() || event.isAdjustmentEnd()) { // update the properties only if this is a single // selection or the end of a series. } } }
マネージャーで多くのオブジェクトを選択する際には、同じ「調整」通知を使用できます。
IlvManager
クラスの場合は、setSelectionAdjusting
メソッドを使用して行えます。boolean isAdjusting = manager.isSelectionAdjusting(); manager.setSelectionAdjusting(true); try { // select or deselect a lot of objects. } finally { manager.setSelectionAdjusting(isAdjusting); }