2013-03-21 108 views
3
private void initialize() { 
    loadPersistenceContext(); 

    List<Events> events = getEventsChoiceBox(getPersistenceContext()); 
    ObservableList<Event> data = FXCollections.observableList(events); 

    cbEvent.setItems(data); // Inserting data into the ChoiceBox 
} 

這是我的主要代碼。問題是當表單被加載時,我得到插入ChoiceBox中的對象而不是屬性。如何用數據庫中的數據填充JavaFX ChoiceBox?

這是我的列表事件

Object[] 
|- String 
|- Integer 
Object[] 
|- String 
|- Integer 

的內容,所以我想與String屬性顯示出來和整數ChoiceBox映射到我的控制器。

我嘗試了很多東西,但無法弄清楚。

+0

我覺得有點難理解你的問題,但看看這個[數據庫ID支持的JavaFX ChoiceBox控件的例子](https://gist.github。com/jewelsea/1422104)的幫助,因爲它似乎解決了你所問的一些有點類似的問題。 – jewelsea 2013-03-21 18:05:24

+0

我知道這有點令人困惑,因爲我不知道如何清楚地表達這一點,但這個例子幫助了很多!非常感謝你! :) – renatojf 2013-03-21 18:09:22

回答

4

查看JavaFX ChoiceBox control backed by Database IDs的示例。

該示例的工作原理是定義一個Choice類,該Choice類包含數據庫行ID和要顯示在選擇框中的項目的字符串表示形式。 Choice的默認toString方法被自定義實現覆蓋,該自定義實現返回要顯示的項目的字符串表示形式,而不是數據庫ID。將選項添加到ChoiceBox時,ChoiceBox會將每個選項轉換爲一個字符串以供顯示。 Choice的顯示字符串值僅僅是選擇文本,而不包括數據庫ID或使用Choice的默認toString,只會顯示無意義的對象引用。

輸出choicebox示例應用程序的:

output of choicebox sample app

另外考慮ComboBox對於這樣的實現,因爲它具有內置到它抽象從節點的顯示節點中的值的機制(通過a CellFactory)。然而,使用ComboBox通常比ChoiceBox複雜。

3

這裏是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")); 

提示:從你的數據庫Retrive鍵值對到一個ArrayList和迭代

檢索值:

choiceBox.getValue().getKey(); // returns the "1" 
choiceBox.getValue().toString(); // returns the "Active" 
1

或者根本:myChoiceBox.setConverter(myStringConverter),傳入一個實例你自己的子類javafx.util.StringConverterJavaDoc)。

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

相關問題