JavaFX ComboBoxのshowメソッド使用時にハマった事象と強引な解決方法
初めに
JavaFXにて、編集可能なComboBoxを用いて、以下のようなサジェストリスト表示を実装しようとした際の話。
事象について
発生した環境
- OS:Windows7 Service Pack1 (32bit、64bit問わず)
- Javaのバージョン:バージョン8 更新101
発生事象の詳細
画面下部に、リストを表示するために必要な領域が足りない場合、コンボボックスの上部に表示される事を期待したが、コンボボックス本体の上に被さって表示された。(JavaFXのComboBoxは、そのような場合に、標準的にコンボボックスの上部に表示してくれるため、同様の動作となることを期待した。)
実装
コンボボックスのテキスト変更毎に、以下のようにサジェスト表示のリストを更新し、showメソッドでコンボボックスのリストを再表示させる実装とした所、前述の事象が発生した。
// サジェスト表示のリストを作成
List<String> list = ListData.stream().filter((t) -> {
return (t.contains(s))? true : false;
}).collect(Collectors.toList());
// 一旦、コンボボックスのリストを閉じる
ComboBox.hide();
// コンボボックスのリストを全削除し、今回作成したサジェスト表示リストを設定
ComboBox.getItems().clear();
ComboBox.getItems().addAll(list);
// コンボボックスのリストを再表示する
ComboBox.arm();
ComboBox.show();
解決方法
コンボボックスのリストを再表示する箇所で、表示⇒閉じる⇒もう一度表示という手順を取ると、なぜかうまく表示された。
// コンボボックスのリストを再表示する
ComboBox.arm();
ComboBox.show();
// コンボボックスのリストを再表示する
ComboBox.arm();
ComboBox.show();
ComboBox.hide();
ComboBox.arm();
ComboBox.show();
コンボボックスのshowメソッドを用いてリストを表示させる場合の作法として、修正前コードに何か誤りがあるためなのか、単純にJavaFXフレームワークのバグなのか、現時点では不明。
ご存知の方がいらっしゃいましたら、コメントいただけると幸いです。
Author And Source
この問題について(JavaFX ComboBoxのshowメソッド使用時にハマった事象と強引な解決方法), 我々は、より多くの情報をここで見つけました https://qiita.com/yoshidashinji/items/96b2293d7904ce65c6ad著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .