我对Java很新,所以请记住这一点......
我有一个swing
GUI,其中包含JComboBox
。
我希望用户选择ArrayList<Person>
的一个选项。
请注意我也可以使用数组。
我之前使用过JComboBox。但只有Strings。
Person
类有一个toString()方法,我想用它来获取应该代表JComboBox中对象的文本。
当稍后推送JButton时,应将选定的Person对象(相同的对象)添加到另一个ArrayList以进行进一步操作。
我希望按钮能够执行以下操作:
Person selectedPerson = (Person) myComboBox.getselectedItem();
然而,我不知何故需要以某种方式将那些Person对象放入该东西中。 我试着用:
myComboBox.setModel(new DefaultComboBoxModel<>(aListOfStuff);
我甚至尝试制作自己的模型:
public class DropDownModel extends DefaultComboBoxModel<Person> implementsMutableComboBoxModel<Person>
但是setModel方法不需要这些。
我在Stackoverflow上看过其他类似的问题,但没有一个回答我的问题。我也注意到有人提到渲染类或类似的东西。
再次:
我希望ArrayList能够在JComboBox中选择其Person对象,以便我可以使用Person tempPerson = (Person) myComboBox.getSelectedObject();
访问所选的对象。
我是否必须制作自己的模型类?
我在JList中显示它们。使用自定义模型
public class ListBoxModel extends AbstractListModel<Person> implements Iterable<Person>
我需要类似的东西吗?
这有可能吗?
顺便说一句:我的所有代码都在GutHub上(如果你有太多时间并想看看):https://github.com/Bernd-L/PersonenManager2/tree/Teacher-selection
一些例子:
myComboBox.setModel(new DefaultComboBoxModel<>(s.getPersonListAsArray()));
cbRemoveClass.setModel(new DefaultComboBoxModel<>(t.getClasses().toArray(new String[t.getClasses().size()])));
someOtherComboBox.setModel(new DropDownModel(dlModel.getList())); // trying to use my custom model
答案 0 :(得分:1)
再次:我希望ArrayList在JComboBox
中选择其Person对象
这不是它的工作原理。 ArrayList对组合框没有任何意义。数据需要存储在ComboBoxModel
。
因此,您需要将ArrayList中的数据添加到模型中。
您编写了一个简单的循环来迭代ArrayList,然后使用组合框便捷方法将项添加到模型中:
for (each item in the ArrayList)
comboBox.addItem( theItem );
答案 1 :(得分:0)
我知道我来晚了,但这就是你想要的答案:
JComboBox<ProtocolInterface> protocolCombo = new javax.swing.JComboBox<>();
HashSet<ProtocolInterface> protocols=this.myDevice.getSupportedProtocols();
protocolCombo.setModel(new javax.swing.DefaultComboBoxModel<ProtocolInterface>(protocols.toArray(new ProtocolInterface[protocols.size()])));
只需确保您的对象(在本例中为ProtocolInterface)具有一个“ toString”方法来显示所需的文本,即可:
@Override
public String toString() {
return name;
}