2 つの JList (カテゴリと項目) をコーディングしたいと考えています。1 つのカテゴリをクリックすると、そのカテゴリのすべてのアイテムが選択され、1 つのアイテムをクリックするとそのカテゴリが選択されます。したがって、両方のJListには、互いにリッスンして選択を変更するListSelectionListenerがあります。
ある種の「ループ」を恐れるべきですか?イベントが消費されたことを伝える方法はありますか? 人々はそのような状況をどのように管理しますか?
ありがとう
2 つの JList (カテゴリと項目) をコーディングしたいと考えています。1 つのカテゴリをクリックすると、そのカテゴリのすべてのアイテムが選択され、1 つのアイテムをクリックするとそのカテゴリが選択されます。したがって、両方のJListには、互いにリッスンして選択を変更するListSelectionListenerがあります。
ある種の「ループ」を恐れるべきですか?イベントが消費されたことを伝える方法はありますか? 人々はそのような状況をどのように管理しますか?
ありがとう
あなたが想像したように、を選択するたびに、あなたはあなたのリスナーに発砲されるようlistA
にトリガーします。その仕事は選択するためにすべての適切なアイテムを見つけることです。選択を強制してからオンにすると、リスナーによって処理されるイベントがトリガーされます。これにより、が強制的に選択されます。2つのリスナーを使用するだけでは、問題は解決しません。 ListSelectionEvent
listA
listB
listB
listB
listA
2つのオプションがあります。
1-単一のリスナーを使用します。このリスナーは、のgetSource
メソッドを使用してイベントのソースをテストする必要がありListSelectionEvent
ます。ソースがの場合はlistB
、のリスナーリストからリスナーを削除し、listA
選択を強制しlistA
てから読み取ります。
list1.removeListSelectionListener(this);
list1.setSelectedIndex(e.getFirstIndex()); //this would have to be played with to allow for intervals
list1.addListSelectionListener(this);`
2- 2つのリスナーを使用しますが、ループを回避するには、アイテムを選択する前に、アイテムがすでに選択されているかどうかをテストする必要があります。すでに選択されている場合は、再度選択しないでください。
Beans Binding APIを見てください。これは NetBeansのチュートリアルです。
2 つのリスナーは、そのための良い方法です。心配はいりません。ループではなく、一度だけリスナーを作成するようにしてください。