簡體   English   中英

如何使用數據庫中的數據填充JavaFX ChoiceBox?

[英]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.StringConverterJavaDoc )子類的實例。

覆蓋toString(和fromString)使您可以完全控制對象的顯示方式,而無需在對象本身中實現toString

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM