2013-03-21 6 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 

Так что я хочу ChoiceBox с этим свойство Строка показывает вверх и Integer отображается на мой контроллер.

Я пробовал много вещей, но не мог понять это.

+0

Мне сложно понять ваш вопрос, но посмотрите, является ли это [примером элемента управления JavaFX ChoiceBox, поддерживаемого идентификаторами базы данных] (https: //gist.github.com/jewelsea/1422104) помогает, как кажется, решить несколько схожую проблему с тем, что вы просите. – jewelsea

+0

Я знаю, что это было немного запутанно, потому что я не знал, как выразить это ясно, но пример очень помог! Большое спасибо! :) – renatojf

ответ

4

См. Этот пример JavaFX ChoiceBox control backed by Database IDs.

В примере используется класс Choice, состоящий из идентификатора строки базы данных и строкового представления элемента, который будет отображаться в окне выбора. По умолчанию метод выбора toString переопределяется с помощью специальной реализации, которая возвращает строковое представление отображаемого элемента, а не идентификатор базы данных. Когда вы добавляете выбор в ChoiceBox, ChoiceBox преобразует каждый Choice в строку для отображения. Отображаемое строковое значение 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.StringConverter (JavaDoc).

Переопределение функции toString (и fromString) дает вам полный контроль над тем, как отображается ваш объект, без необходимости реализовать toString в самом объекте.

Смежные вопросы