LoginSignup
0
1

More than 5 years have passed since last update.

JavaFX ComboBoxのshowメソッド使用時にハマった事象と強引な解決方法

Last updated at Posted at 2016-12-28

初めに

 JavaFXにて、編集可能なComboBoxを用いて、以下のようなサジェストリスト表示を実装しようとした際の話。

01.png

事象について

発生した環境

  • OS:Windows7 Service Pack1 (32bit、64bit問わず)
  • Javaのバージョン:バージョン8 更新101

発生事象の詳細

 画面下部に、リストを表示するために必要な領域が足りない場合、コンボボックスの上部に表示される事を期待したが、コンボボックス本体の上に被さって表示された。(JavaFXのComboBoxは、そのような場合に、標準的にコンボボックスの上部に表示してくれるため、同様の動作となることを期待した。)

  • 期待する表示
    02.png

  • 実際の表示
    03.png

実装

 コンボボックスのテキスト変更毎に、以下のようにサジェスト表示のリストを更新し、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フレームワークのバグなのか、現時点では不明。
 ご存知の方がいらっしゃいましたら、コメントいただけると幸いです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1