java - 如何检索jComboBox中绑定在数据库表中的对象并将其存储到另一个表中
问题描述
我在我的数据库中创建了一个名为“model”和“item”的表。并创建了类 Model() 和 Item()。对于表“模型”,它具有以下字段:model_ID 和 model_description。对于表“item”: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”对象。
但是,当您使用自定义渲染器时,您将破坏组合框,因为您将无法再使用键盘通过键入项目描述的第一个字符来选择项目。有关此问题和解决方案的更多信息,请参阅带有自定义渲染器的组合框。
推荐阅读
- typo3 - 如何将 DataProcessors 与 TYPO3 插件一起使用
- ruby-on-rails - ActiveStorage:所有者记录被销毁后分离(而不是清除)附件?
- image - Vue降价图像不显示
- npm - 如何在 dart 代码中使用 npm 包?
- r - 通过 R Bloomberg API 检索以文本形式存储的历史数据
- c# - 在 .net 中配置quartz.net 调度程序
- angular - Cypress 在取消归档缓存时使用 CircleCI 2.0 失败并且权限被拒绝
- c# - Windows 窗体应用程序的 Windows 10 和 8 吐司通知
- rust - 与 Vec 相比,为什么 SmallVec 在存储具有生命周期的类型时会有不同的行为?
- docker - 对于 biz_wacore_1 无法启动服务 wacore:OCI 运行时创建失败:container_linux.go:345:正在启动