データベースの値によってデータが取り込まれるJComboBoxがあります。値は常にチェックされ、コンボボックスのリストが更新されます。値は通常は同じままですが、削除または追加されることもあります。モデルを設定するときのJava JComboBoxのリセット選択
public static void updateList(List curList, List items, JComboBox box,
boolean addEmptyItem) {
curList.clear();
curList.addAll(items);
ActionListener[] listeners = box.getActionListeners();
for (ActionListener al : listeners) {
box.removeActionListener(al);
}
Object selected = box.getSelectedItem();
box.removeAllItems();
if (addEmptyItem) {
box.addItem("");
}
for (Object t : curList) {
box.addItem(t);
}
if (selected != null) {
box.setSelectedItem(selected);
} else {
if (box.getItemCount() > 0) {
box.setSelectedIndex(0);
} // end if
}
if (listeners != null) {
for (ActionListener al : listeners) {
box.addActionListener(al);
}
}
}
ウィンドウがcurList
を追跡し、items
が新しいリストです:私は変更はこれが方法です消えてから、選択リストのポップアップを防ぐために行われていたことをリスナーに通知することなく、リストを更新する方法があります。
選択したアイテムは、すべてのアップデートでポップアップが表示される前の状態にリセットされます(これは問題ありません。選択したアイテムは同じままでなければなりません)。しかし、これはユーザーがホバリングしているものに影響しています。これは、ユーザーがスクロールして選択したアイテムがリストの最初のものだった場合、ポップアップが自動的にスクロールバーをスクロールバーに表示したときに顕著に表示されます。マウスのホバーが上に移動しているという事実は本当の問題です。
ホバーが選択されているアイテムに変更されないようにする方法はありますか?
JComboBoxのItemListenerを動的に削除/追加することを検討してください。 – copeg
@copeg ActionListenersが削除された方法を説明したように、ItemListenersを削除/追加しました。これは私が見ていた問題を解決しました。ありがとう! – Trim