如何在 jComboBox 中检索绑定在数据库表中的对象并将其存储到另一个表中



我在数据库中创建了一个名为"model"和"item"的表。并创建了类 Model(( 和 Item((。 对于表 "模型",它具有以下字段:model_ID和model_description。对于表"项目":item_ID、item_description、model_ID。

通过使用 Netbeans 8.2 绑定表"模型"和 jComboBox,我能够在 jComboBox 中显示model_description。

现在我想做的是将jComboBox中的选定项目存储到我的"项目"表中。

我试过这段代码:

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();

这段代码的问题是,如果我在我的 jComboBox 中按升序/降序对model_description的显示进行排序,它不会返回正确的对象。

有没有办法将jComboBox中的选定项目直接存储为模型对象?

谢谢你的帮助!

通过使用 Netbeans 8.2 绑定表"模型"和 jComboBox,我能够在 jComboBox 中显示model_description。

我不知道 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"对象。

但是,当您使用自定义渲染器时,您将破坏组合框,因为您将无法再通过键入项目描述的第一个字符来使用键盘选择项目。有关此问题和解决方案的详细信息,请参阅带有自定义呈现器的组合框。

最新更新