java - jcombobox - 检查模型内容是否更改

标签 java swing jcombobox comboboxmodel

我创建了一个扩展 JComboBox 的类。模型设置如下:

DefaultComboBoxModel<String> readoutModel = new DefaultComboBoxModel<String>(options.toArray(new String[options.size()]));
setModel(readoutModel);

该类实现一个监听器接口(interface)来监听另一个类 (myModel) 的更改。这些更改可能与该组合框根本不相关,它可能包含选择更改,并且可能包含该组合框的内容更改。

像这样更改选择很容易:

@Override
public void modelChanged() {
    ...
    setSelectedItem(myModel.getSelectedReadOut());
}

但是如果组合框的内容需要更改怎么办?我应该更换组合框模型吗?我是否必须对这些项目进行交互并将它们与 myModel 中存在的项目进行比较?我还可以从组合框模型中删除所有项目,然后从 myModel 中逐项添加? (如果只是选择发生变化,也会发生这种情况......)。

最佳答案

当基础数据更改时更新组合框的三个选项:

  • 更换模型(更换新模型)
  • 使用通用可变模型(例如 DefaultComboBoxModel)并添加/删除数据以反射(reflect)更改
  • 创建您自己的模型实现,它是实际数据的适配器,并触发更改事件以反射(reflect)数据的更改。

Adapter 解决方案非常容易实现(ComboBoxModel,它是一个 ListModel),不需要复制数据,因此不需要同步。通常是最好的选择,在我的选择中。

关于java - jcombobox - 检查模型内容是否更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25990632/

相关文章:

java - 我可以从 osgi 控制台获取有关捆绑服务的哪些信息?

java - 无法在 grails 中的非请求渲染操作中使用 session

Java 使用数组列表获取值的位置

Java Swing JComboBox 选择唯一可用的项目

java - jtable 和自定义组合

java - 使用Java的Selenium : Start Hub Server and register Nodes with Hub

java - 无法在我的 Swing 程序中设置 JPanel 的背景。

java - 为什么我必须导入 java.awt.* 和 java.awt.event.* (例如)

java - 如何覆盖 JLabel importData

java - 使用所有(jComboBox、JTextField、jFileChooser)作为表编辑器覆盖引用