路地裏牧場

技術系ブログだったけどごった煮になった謎ブログ

JavaFX ListViewの中身を変更すると表示がおかしくなる問題の回避方法

要素を追加したり削除したりすると要素が残ったり複製されたりする。でもそれは表示だけで中身は正常。どうなってるんだ。と2日ほど悩んだ結果、解決。

listView.setCellFactory(listView -> new ListCell<String>() {
    @Override
    protected void updateItem(String item, boolean empty) {
        super.updateItem(item, empty);

        if (item == null || empty) {
            setText("");
            return;
        }

        setText(item);
    }
});

文字列のListViewとListCell。itemがnullかemptyがtrueの時にListCellを空に更新することで解決。
JavadocのListCell::updateItemによると、emptyは空のセルを描画するために渡される、とのこと。つまりこいつを取っ捕まえてちゃんと更新してやらないといけないわけだ。
itemがnullの時にも更新しないとダメな様子。

おしり。

検索用:JavaFX ListView empty refresh update repaint