Как получить объект в jComboBox, который связан с таблицей базы данных, и сохранить его в другой таблице - PullRequest
0 голосов
/ 02 октября 2018

Я создал таблицу с именем «модель» и «элемент» в моей базе данных.И создали классы Model () и Item ().Для таблицы "модель" она имеет следующие поля: model_ID и model_description.Для таблицы "item": item_ID, item_description, model_ID.

Благодаря связыванию таблицы "model" и jComboBox с использованием Netbeans 8.2 я смог отобразить model_description в jComboBox.

Теперь, что яЯ хочу сохранить выбранный элемент в jComboBox в моей таблице "item".

Я пробовал этот код:

Session session = NewHibernateUtil.getSessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Model model = (Model) session.get(Model.class, jComboBox.getSelectedIndex+1);
Item item = new Item();
item.setDescription(description);
item.setModel(model);
session.save(item);
transaction.commit();
session.close();

Проблема этого кода в том, что если я отсортирую отображение model_description в моем jComboBox в порядке возрастания / убывания, он не вернетсяправильный объект.

Есть ли способ сохранить выбранный элемент непосредственно в качестве объекта модели в jComboBox?

Спасибо за помощь!

1 Ответ

0 голосов
/ 02 октября 2018

Благодаря связыванию таблицы «модель» и jComboBox с использованием Netbeans 8.2, я смог отобразить model_description в jComboBox.

Я понятия не имею, что делает привязка Netbeans, но этоне кажется хорошим решением для меня.Что если вы когда-нибудь перейдете с платформы Netbeans на то, как будет работать ваш код или как вы сможете это сделать в будущем?

Вместо этого я бы предложил вам сохранить пользовательский объект в JComboBox.Таким образом, вы можете сохранить свой объект Item в поле со списком, а затем создать пользовательское средство визуализации, чтобы отобразить «описание» в поле со списком.

Когда вы хотите выбранный элемент, который вы просто используете:

comboBox.getSelectedItem() 

и у вас есть доступ к вашему объекту Item со всеми его свойствами.

Пользовательский рендерер будет выглядеть примерно так:

class FooRenderer extends BasicComboBoxRenderer
{
    public Component getListCellRendererComponent(
        JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
    {
        super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);

        if (value instanceof Foo)
        {
            Foo foo = (Foo)value;
            setText( foo.getDescription() );
        }

        return this;
    }
}

Замените объект "Foo" на ваш "Item""object.

Однако при использовании пользовательского средства визуализации вы разрушите поле со списком, так как вы больше не сможете выбирать элемент с помощью клавиатуры, вводя первый символ в описании элемента.См. Combo Box With Custom Renderer для получения дополнительной информации об этой проблеме и решении.

...