Java 如何在JComboBox中显示自定义对象(使用toString)

Java 如何在JComboBox中显示自定义对象(使用toString),java,swing,jcombobox,Java,Swing,Jcombobox,我对Java相当陌生,所以请记住 我有一个swingGUI,其中包含一个JComboBox。 我希望用户选择ArrayList的一个选项。 请注意,我也可以使用数组。 我以前使用过JComboBox,但只使用字符串。 Person类有一个toString()方法,我想用它来获取应该表示JComboBox中对象的文本 稍后按下JButton时,应将选定的Person对象(同一个)添加到另一个ArrayList以进行进一步操作 我希望按钮可以执行以下操作: Person selectedPerson

我对Java相当陌生,所以请记住

我有一个
swing
GUI,其中包含一个
JComboBox
。 我希望用户选择
ArrayList
的一个选项。 请注意,我也可以使用数组。 我以前使用过JComboBox,但只使用字符串。
Person
类有一个toString()方法,我想用它来获取应该表示JComboBox中对象的文本

稍后按下JButton时,应将选定的Person对象(同一个)添加到另一个ArrayList以进行进一步操作

我希望按钮可以执行以下操作:

Person selectedPerson = (Person) myComboBox.getselectedItem();
然而,我需要以某种方式将这些Person对象放入该对象中。 我尝试使用:

myComboBox.setModel(new DefaultComboBoxModel<>(aListOfStuff);
我需要类似的东西吗

这可能吗

一些例子:

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
myComboBox.setModel(新的DefaultComboBoxModel(s.getPersonListAsArray());
setModel(新的DefaultComboxModel(t.getClasses().toArray(新字符串[t.getClasses().size()]));
someOtherComboBox.setModel(新的下拉模型(dlModel.getList());//尝试使用我的自定义模型
同样:我希望ArrayList在JComboBox中可以选择其Person对象

这不是它的工作原理。ArrayList对组合框没有任何意义。数据需要存储在
ComboxModel

因此,需要将ArrayList中的数据添加到模型中

您可以编写一个简单的循环来遍历ArrayList,然后使用组合框方便的方法向模型中添加一个项:

for (each item in the ArrayList)
    comboBox.addItem( theItem );
同样:我希望ArrayList在JComboBox中可以选择其Person对象

这不是它的工作原理。ArrayList对组合框没有任何意义。数据需要存储在
ComboxModel

因此,需要将ArrayList中的数据添加到模型中

您可以编写一个简单的循环来遍历ArrayList,然后使用组合框方便的方法向模型中添加一个项:

for (each item in the ArrayList)
    comboBox.addItem( theItem );

我知道我迟到了,但这是你一直在寻找的答案:

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()])));

我知道我迟到了,但这是你一直在寻找的答案:

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()])));

如果接受a)无参数b)数组(即
[]
)或c)向量
为什么要尝试使用
数组列表构建一个?“但是setModel方法不需要这些。”总是复制/粘贴错误和异常输出!听起来好像你在试图“用魔法编程”,但这永远不会奏效。尝试理解编译器或运行时提供的消息。检查API文档中使用的方法和构造函数。@AndrewThompson抱歉,我忘了提到这个。我已经编辑过了。谢谢你的评论。我没有得到异常,它不会编译(如我所预期的)。不过,感谢您的评论。“我所有的代码都在GutHub上”很少有人会关注外部链接,很少有人会在完整的代码库中寻找问题。在这里贴一个帖子作为问题的答案。编辑不包括复制/粘贴的编译器错误消息。如果接受a)无参数b)数组(即
[]
)或c)向量
为什么要尝试使用
数组列表构建一个?“但是setModel方法不需要这些。”总是复制/粘贴错误和异常输出!听起来好像你在试图“用魔法编程”,但这永远不会奏效。尝试理解编译器或运行时提供的消息。检查API文档中使用的方法和构造函数。@AndrewThompson抱歉,我忘了提到这个。我已经编辑过了。谢谢你的评论。我没有得到异常,它不会编译(如我所预期的)。不过,感谢您的评论。“我所有的代码都在GutHub上”很少有人会关注外部链接,很少有人会在完整的代码库中寻找问题。在这里贴一个帖子作为问题的答案。编辑不包括复制/粘贴的编译器错误消息。感谢您的回复。为什么我需要一个
哈希集
?它是必需的,还是任何集合(例如
ArrayList
)都有效?HashSet只是用于确保集合中只有唯一项的集合。请注意,我使用.toArray将其转换为组合框模型所需的数组。感谢您的回复。为什么我需要一个
哈希集
?它是必需的,还是任何集合(例如
ArrayList
)都有效?HashSet只是用于确保集合中只有唯一项的集合。注意,我使用.toArray将其转换为Combobox模型所需的数组。
@Override
public String toString() {
    return name;
}