私はいくつかの値(ListItem
)を持つクラスを持っており、これらの項目のリスト(ListView<ListItem>
)を表示したいと思います。 ListItem
はvalue
というプロパティを持っていますが、ListView<ListItem>
のテキストとして表示することをお勧めします。それ以外の場合は、特にアイテムの選択に関して、通常のように表示され、機能するはずです。私はこれを達成するために次のコードを持っています。 FXMLは怠惰から省かれており、それはちょうど<ListView />
です。JavaFX ListView CellFactoryは項目の選択を無効にします
// Controller for FXML
public class MainController {
// Wrapper class containing several values
private class ListItem {
private String value;
public ListItem(String value) {
this.value = value;
}
public String getValue() {
return value;
}
... // Other useful stuff
}
@FXML private ListView<ListItem> list;
@FXML
public void initialize() {
// Set list to display using the given CellFactory
list.setCellFactory((list) -> {
return new ListCell<ListItem>() {
@Override
protected void updateItem(ListItem item, boolean empty) {
if (empty) return;
// Display item's value property
setText(item.getValue());
}
};
});
// Add test data
list.getItems().add(new ListItem("test"));
list.getItems().add(new ListItem("test2"));
// Print when selection changes
list.getSelectionModel().selectedItemProperty().addListener((evt) -> {
System.out.println("Selection changed!");
});
}
}
これはListView
の各項目内のそのvalue
プロパティを使用して、正しくListItem
を表示します。ただし、選択が解除され、System.out.println(...)
は実行されません(この項目では、もGUIではではありません)。私はlist.setCellFactory(...)
のステートメントを削除することが原因であることを発見しましたが、私は窮地に陥ります。
list.setCellFactory(...)
が存在する場合、アイテムは正しいテキストを使用するが、がを選択することができません。 list.setCellFactory(...)
が存在しない場合、項目はの間違ったテキストを使用しますが、はとなります。テキストを正しく表示するために何か特別なことがありますか?とアイテムを選択しますか?
私は前提条件のグーグルを行っていますが、この特定の問題を持つ他の人は見つかりませんでした。どんな助けでも大歓迎です。
アイテムが削除されたときのセル。それ以外の場合は、次のような問題が発生します。http://stackoverflow.com/q/38483552/2991525空のセルに対して 'text'を' null'または '' ''に設定してください。 – fabian