[英]How do I populate a JavaFX ChoiceBox with data from the Database?
private void initialize() {
loadPersistenceContext();
List<Events> events = getEventsChoiceBox(getPersistenceContext());
ObservableList<Event> data = FXCollections.observableList(events);
cbEvent.setItems(data); // Inserting data into the ChoiceBox
}
這是我的主要代碼。 問題是加載表單時,我得到的是在ChoiceBox中插入的對象,而不是屬性。
這是我的列表事件的內容
Object[]
|- String
|- Integer
Object[]
|- String
|- Integer
所以我想要一個帶有String屬性的ChoiceBox,並將Integer映射到我的控制器。
我嘗試了很多東西,但無法理解。
請參閱由數據庫ID支持的JavaFX ChoiceBox控件的此示例。
該示例通過定義Choice類來工作,該類由數據庫行ID和要在“選擇”框中顯示的項的字符串表示組成。 使用自定義實現覆蓋Choice的默認toString
方法,該實現返回要顯示的項的字符串表示形式,而不是數據庫ID。 將選項添加到ChoiceBox時,ChoiceBox會將每個Choice轉換為字符串以供顯示。 Choice的顯示字符串值只是選擇文本,而不是包括數據庫ID或使用僅顯示無意義對象引用的默認toString
of Choice。
選擇框示例應用的輸出:
還要考慮一個ComboBox用於這樣的實現,因為它內置了一些機制來從節點的顯示中抽象出節點的值(通過CellFactory )。 然而,使用ComboBox
通常比ChoiceBox
更復雜。
這是來自forums.oracle.com的另一個簡單實現
為鍵值創建一個類
public class KeyValuePair {
private final String key;
private final String value;
public KeyValuePair(String key, String value) {
this.key = key;
this.value = value;
}
public String getKey() { return key; }
public String toString() { return value; }
}
然后創建ChoiceBox為:
ChoiceBox<KeyValuePair> choiceBox = new ChoiceBox<KeyValuePair>();
填充元素;
choiceBox .getItems().add(new KeyValuePair("1", "Active"));
提示:將數據庫中的鍵值對重新轉換為ArrayList並進行迭代
要檢索值:
choiceBox.getValue().getKey(); // returns the "1"
choiceBox.getValue().toString(); // returns the "Active"
或者簡單地執行: myChoiceBox.setConverter(myStringConverter)
,傳入您自己的javafx.util.StringConverter
( JavaDoc )子類的實例。
覆蓋toString(和fromString)使您可以完全控制對象的顯示方式,而無需在對象本身中實現toString
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.