我正在尝试创建一个 JComboBox,它将在其中保存播放列表对象。我想让它保存播放列表的字符串标题(即键/显示值)以及对实际播放列表的引用,以便当用户单击与所选播放列表相关的按钮时可以直接访问它。组合框的内容将由用户动态更改,因此另一个问题中的某人建议使用 DefaultComboBoxModel 来允许其自行更新。我看到这个问题Adding items to a JComboBox建议将该项目包装在一个新类中。我尝试过这个,但现在我的组合框显示为空白。
我的旧代码:
String[] playlistsStringArray = {"Library"};
JComboBox playlists = new JComboBox(playlistsStringArray);
DefaultComboBoxModel model;
// worked but only held strings. I was having trouble referencing the playlist itself
model = new DefaultComboBoxModel(playlistsStringArray);
playlists.setModel(model);
我当前的代码:
ComboItem myLibCombo = new ComboItem("Library", myLibrary);
DefaultComboBoxModel model;
ComboItem[] comboItems = new ComboItem[0];
JComboBox comboPlaylists = new JComboBox(comboItems);
// empty combo box
model = new DefaultComboBoxModel(comboItems);
comboPlaylists.setModel(model);
comboPlaylists.addItem(myLibCombo);
还尝试过:
ComboItem myLibCombo = new ComboItem("Library", myLibrary);
DefaultComboBoxModel model;
ComboItem[] comboItems = {myLibCombo};
JComboBox comboPlaylists = new JComboBox(comboItems);
// empty combo box
model = new DefaultComboBoxModel(comboItems);
comboPlaylists.setModel(model);
有更简单的方法吗?或者我最好的选择是将播放列表保存在数组中并每次搜索匹配的标题?如有任何建议,我们将不胜感激,谢谢。
最佳答案
I saw this question Adding items to a JComboBox recommended wrapping the item in a new class. I tried this but now my combo box comes up blank.
是的,这是最简单的解决方案。
I tried this but now my combo box comes up blank.
那你做错事了。诀窍是确保重写 ComboItem 类的 toString() 方法。您没有发布正确的SSCCE所以我们无法猜测你做错了什么。
更多信息,您可以查看Combo Box With Hidden Data它更详细地解释了这个概念。
有些人不喜欢覆盖 toString() 方法的想法,在这种情况下您可以查看 Combo Box With Custom Renderer使用自定义渲染器时获得更完整的方法。
关于java - 使用保存值的对象创建 JComboBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23698220/