選択および削除できるアイテムの長い垂直リストであるListFieldがあります。アイテムを削除すると、リストは一番上にスクロールして戻ります。setSelectedIndex(rowIndex)を使用して、表示していたリスト内の場所に戻ることができますが、これでは、画面上で表示していた行は保持されません。代わりに、正しいインデックスが画面に表示されるとスクロールが停止したため、行は画面の下部に表示されます。
行を削除してリストのビュー/スポットを保持する方法はありますか?
選択および削除できるアイテムの長い垂直リストであるListFieldがあります。アイテムを削除すると、リストは一番上にスクロールして戻ります。setSelectedIndex(rowIndex)を使用して、表示していたリスト内の場所に戻ることができますが、これでは、画面上で表示していた行は保持されません。代わりに、正しいインデックスが画面に表示されるとスクロールが停止したため、行は画面の下部に表示されます。
行を削除してリストのビュー/スポットを保持する方法はありますか?
間違った ListField.setSize() 関数を使用していることに気付きました。
ListField.setSize(int size) はフォーカスをリストの先頭に戻しますが、必要に応じて ListField.setSize(int size, int focusRow) を使用してフォーカスを「currentIndex」のままにすることができます。これが誰かに役立つことを願っています
リスト内の現在の位置を保存します(経由myListField.getSelectedIndex()
)、としましょう
int myVar = myListField.getSelectedIndex();
アイテムを削除
を使用myVar
し、現在のリスト サイズとmyVar
値を使用して計算し、myListField.setSelectedIndex(int index);
別のスレッドを使用してリスト インデックスを設定Application.invokeLater(Runnable thread);
し、アプリケーションの UI を更新する際のイベント ロックの問題を回避します。
それでおしまい。