【问题标题】:JComboBox item refresh after data retrieval from database [closed]从数据库中检索数据后 JComboBox 项目刷新[关闭]
【发布时间】:2015-05-27 07:54:56
【问题描述】:

我正在使用JComboBox 在我的小程序中显示String[]。现在我的项目需要在前一个面板中执行一些操作后填充组合框。

下面是我写的代码:

JComboBox comboBox = new JComboBox(model);
comboBox.setMaximumRowCount(100);
comboBox.setEditable(true);
comboBox.setBounds(142, 196, 277, 20);

如何根据我在上一个面板中执行的操作做出相应的反应?

【问题讨论】:

  • “如何根据我在上一个面板中执行的操作做出相应的反应?” 您尝试了什么?预期的行为是什么?当前的行为是什么?一般提示: 1) 为了尽快获得更好的帮助,请发布MCVE(最小完整可验证示例)或SSCCE(简短、自包含、正确示例)。 ..
  • .. 2) Java GUI 必须在不同的语言环境中使用不同的 PLAF 在不同的操作系统、屏幕尺寸、屏幕分辨率等上工作。因此,它们不利于像素完美布局。而是使用布局管理器,或 combinations of them 以及 white space 的布局填充和边框。
  • .. 3) 为什么要编写小程序?如果是老师指定的,请参考Why CS teachers should stop teaching Java applets
  • 嗨 Andrew,我正在尝试开发一个桌面应用程序,它有助于从 db 中获取记录数并保存在 excel 文件中。现在从文件中检索这些计数并显示为下拉列表。所以我尝试使用 DefaultComboBoxModel,但不知道如何使用它。
  • "..so 我试过了.." 让代码来说话,特别是 MCVE。硬编码一些数据以替换数据库。如果您正在制作desktop application,我仍然不明白为什么问题会提到“小程序”。桌面应用程序不会嵌入到网页中,但小程序会。

标签: java database swing jcombobox


【解决方案1】:

当您更改“模型”时,组合框视图应自动更新(因为标准或编写良好的 ComboBoxModel 会通知视图它需要更改)。

例如将“模型”设为 DefaultComboBoxModel 类型,然后在执行“在其他窗格上的操作”时 - 确保您的代码可以访问“模型”,然后更改它。天真地说,这可能是直接访问:

actionPerformed(...){ // action from other pane
    ... // some logic
    otherPane.model.removeAllElements();
    otherPan.model.addElement(...)
}

但是,更好的设计会不那么直接,例如您的操作可能会触发您自己的事件(例如“productsAddedToMyStore”),并且窗格可以监听它然后更新模型。这减少了组件之间的耦合。

【讨论】:

  • 非常感谢。现在效果很好。现在组合框被从数据表中提取的新数据刷新...
  • 感谢您的更新。很高兴听到:)
猜你喜欢
  • 2012-06-05
  • 2014-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多