How do I populate a JavaFX ChoiceBox with data from the Database?

java, javafx

Solution

See this example of a JavaFX ChoiceBox control backed by Database IDs.

The example works by defining a Choice class consisting of a database row ID and a string representation of the item to be displayed in the Choice box. The default `toString` method of Choice is overridden with a custom implementation that returns a string representation of the item to be displayed and not the database ID. When you add the choices to the ChoiceBox, the ChoiceBox will convert each Choice into a string for display. The displayed string value of the Choice is just the choice text rather than also including the database ID or using the default `toString` of Choice that would just display a meaningless object reference.

Output of choicebox sample app:

Also consider a ComboBox for such an implementation, as it has a mechanisms built into it to abstract the values of nodes from the display of the nodes (via a CellFactory). Use of a `ComboBox` is however often more complex than a `ChoiceBox`.

Problem

``` private void initialize() { loadPersistenceContext(); List<Events> events = getEventsChoiceBox(getPersistenceContext()); ObservableList<Event> data = FXCollections.observableList(events); cbEvent.setItems(data); // Inserting data into the ChoiceBox } ``` This is my main code. Problem is when the form is loaded, I get the Objects inserted in the ChoiceBox and not the properties. This is the content of my List Events ``` Object[] |- String |- Integer Object[] |- String |- Integer ``` So I want a ChoiceBox with that String property showing up and the Integer mapped to my controller. I tried a lot of things but couldn't figure it out.

Original source