如何让两个JComboBox具有相同的元素?

时间:2015-02-26 13:12:39

标签: java swing clone jcombobox comboboxmodel

我有一个列表(ArrayList),其中包含我想要在两个JComboBox中显示的元素,因此它们都显示相同的元素,但是当您在一个JComboBox中选择一些元素时,另一个元素不能更改。

我现在要做的是创建两个DefaultComboBoxModel并在循环中添加两个元素。

DefaultComboBoxModel modeloA = new DefaultComboBoxModel();
DefaultComboBoxModel modeloB = new DefaultComboBoxModel();

// Agregamos el resto de plantillas.
for (OcupacionType plantilla : plantillas) {

    modeloA.addElement(plantilla);
    modeloB.addElement(plantilla);

}

comboboxA.setModel(modeloA);
comboboxB.setModel(modeloB);

这是更有效的方法吗?这是克隆模型的方法吗?

2 个答案:

答案 0 :(得分:3)

wrong suggestion start

  • How to have two JComboBox with the same elements? - >不会让我发现,不要这样做,只为当前JVM中的所有JComboBox创建一个DefaultComboBoxModel,并为两个JComboBox共享此模型

  • 如果两个模型包含相同的数据,它们应该是低效的

  • 对于基于AbstractListMode的可编辑JComboBox非常重要

wrong suggestion ended

来自ListDataListener的EDIT交互事件,共享两个实例的选定项目(JComboBox),这里是SSCCE / MCVE形式的简短说明(参见对c omboBox1 & comboBox2的选择之间的差异(使用{{1的简单覆盖) }})与ListDataListener

enter image description here

comboBox3 & comboBox4

答案 1 :(得分:1)

正如@StanislavL在评论中所建议的那样,您可以使用Vector初始化新模型。

Vector vec = new Vector(plantillas);

comboboxA.setModel(new DefaultComboBoxModel(vec));
comboboxB.setModel(new DefaultComboBoxModel(vec));

这非常简单有效,因为只制作了一个元素副本(制作矢量)。