Combobox
トークン化されたオートコンプリートを行うために、に基づいて複合コンポーネントを作成しています。基本的な考え方は、Combobox
が現在のテキストに一致するアイテムをモデルに照会し、ユーザーが提示されたオプションから何かを選択すると、トークン化された提示のために別のリストに追加されるというものです。全体として、Facebook、Apple Mail、およびその他のさまざまな場所で見た入力のように見えます.
私の現在の問題は、カーソルキーを使用してリストを上下に移動しただけではなく、ユーザーがリストから何かを選択したときを実際に判断できないことに起因しているようです。Combobox#onSelect
ドロップダウンのオプションのリストをナビゲートするときにトリガーされるようです。実際に必要なのは、ユーザーが「これが欲しい」アクションを実行したときに選択を取得する方法です。通常、ドロップで選択してEnterキーを押しますダウンするか、マウスでドロップダウンのエントリを手動で選択します。
これまでに思いついた最善の方法は、 を監視し、が falseCombobox#onOpen
かどうかを確認してから、モデルを手動で調べて選択することです。OpenEvent#isOpen
onSelect
「これが欲しい」シナリオを認識または検出し、「 3 番目のオプションをダウンさせたいので、DOWN、DOWN、DOWN + ENTER」の間にトリガーされたイベントと区別するためのより良い方法はありますか?
以下のコードは基本的に私が今見ているものです
public void onOpen$input(OpenEvent oe) {
logger.info("OpenEvent.isOpen: {}", oe.isOpen());
if (oe.isOpen() == false) {
ListModel model = this.input.getModel();
logger.info("model: {}", model);
if (model instanceof Selectable) {
logger.info("model is Selectable");
Set<?> selection = ((Selectable) model).getSelection();
logger.info("selection: {}", selection);
for (Object selected : selection) {
logger.info("selected: {}", selected);
if (selected instanceof Comboitem) {
logger.info("selected is Comboitem");
selected = ((Comboitem) selected).getValue();
logger.info("selected: {}", selected);
}
addToken(selected);
}
}
}
}