gpt4 book ai didi

Java Swing - DefaultListModel - 当我只想打印一个字段时打印所有对象信息

转载 作者:行者123 更新时间:2023-12-02 06:26:40 26 4
gpt4 key购买 nike

我有这个 DefaultListModel

DefaultListModel listModel;
//constructor does the right hting... etc.. I skipped over a lot of code
JList jlist_available_items;
....
jlist_available_items= new JList(cartModel); //etc

一切都运行得几乎完美,问题是

listModel.addElement(product); 

如果我将其更改为product.name,它将看起来正确,但行为错误[对象本身将无法访问,只能访问名称]

正在将对象添加到 View 中,我只想添加对象名称。

当我将其更改为名称时,它会导致各种问题,因为我将对象存储在 HashMap 中,并且 HashMap 使用对象作为键,而不是product.name字符串。

原因是这个方法可以在 HashMap 中搜索正确的对象。

  for (Product p : store.database.keySet()) {
if (jlist_available_items.getSelectedValuesList().contains(
(Product) p)) { // if item is selected
cart.addItem(p);
}
}

我该如何解决这个问题?我已经尝试修复它和相关错误近两个小时了 = ( !

示例输出也是

Product [description=descrion test, name=test]

这就是它正在打印的内容。我只是想让它打印名字。 =(!

对象也位于 HashMap 中。我可以迭代 HashMap ,直到对象具有相同的名称值,然后使用它,但我不想这样做。我想要一个更合适、更可扩展的解决方案,因为我很难想到一个解决方案。

顺便说一下!这是 Swing 中的 GUI 应用程序!如果您想要图像,只需询问 = )!

编辑:现在 nmy 列表单元格渲染器坏了!刚才还在工作... = (

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

Product product = (Product) value;

return this;
}
}

最佳答案

默认情况下,会调用模型中对象的toString()方法来显示列表元素。并且您的 Product.toString() 方法返回 Product [description=descrion test, name=test]

如果您想显示其他内容,请使用 ListCellRenderer,如 swing tutorial about JList 中所述。 .

编辑:您的渲染器有一个错误:它没有设置返回组件(这是一个 JLabel)的文本。应该是:

Product product = (Product) value;
setText(product.getName());
return this;

关于Java Swing - DefaultListModel - 当我只想打印一个字段时打印所有对象信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20451366/

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