gpt4 book ai didi

Java - 如何使非字符串对象的 JComboBox 显示字符串名称?

转载 作者:行者123 更新时间:2023-12-03 20:29:29 24 4
gpt4 key购买 nike

Imgur

我想做 JComboBox组件展示String名称,而不是引用。但是,我不知道这是如何完成的。

下面显示了我的代码:

public class Properties extends JPanel implements ItemListener {
private static final long serialVersionUID = -8555733808183623384L;
private static final Dimension SIZE = new Dimension(130, 80);
private JComboBox<Category> tileCategory;

public Properties() {
tileCategory = new JComboBox<Category>();
tileCategory.setPreferredSize(SIZE);
tileCategory.addItemListener(this);

this.setLayout(new GridLayout(16, 1));
loadCategory();
}

private void loadCategory() {
//Obtains a HashMap of Strings from somewhere else. All of this is constant, so they
//aren't modified at runtime.
HashMap<Integer, String> map = EditorConstants.getInstance().getCategoryList();

DefaultComboBoxModel<Category> model = (DefaultComboBoxModel<Category>) this.tileCategory.getModel();
for (int i = 0; i < map.size(); i++) {
Category c = new Category();
c.name = map.get(i + 1);
model.addElement(c);
}
this.add(tileCategory);
}
}

我唯一知道的是我通过了 Category类到 JComboBox .下面显示了 Category类(class):
public class Category {
public String name;
}

就是这样。

我唯一的目标是获得 Category.name成员变量出现在 JComboBox下拉列表,矩形在图片中标记的位置。

谁能告诉我这是如何完成的?提前致谢。

最佳答案

A JComboBox使用 ListCellRenderer允许您自定义值的呈现方式。

看看Providing a Custom Renderer更多细节

例如...

public class CategoryListCellRenderer extends DefaultListCellRenderer {

@Override
public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {

if (value instanceof Category) {
value = ((Category)value).name;
}

return super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); //To change body of generated methods, choose Tools | Templates.

}

}

然后您只需指定组合框的渲染
tileCategory.setRenderer(new CategoryListCellRenderer());

现在,话虽如此,这将阻止用户使用内置于搜索功能的组合框。

为此,请检查 Combo Box With Custom Renderer可能的解决方法。这是由我们自己的 camickr 创作的

关于Java - 如何使非字符串对象的 JComboBox 显示字符串名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24179793/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com