0

我有这个 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 它看起来会正确,但行为错误[对象本身无法访问,只有名称]

正在将对象添加到视图中,而我要添加的只是对象名称。

当我将其更改为名称时,它会导致各种问题,因为我将对象存储在 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]

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

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

顺便一提!这是 Swing 中的 GUI 应用程序!如果您想要图片,请询问 = )!

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

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

        Product product = (Product) value;

        return this;
       }
    }
4

1 回答 1

2

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

如果您想显示其他内容,请使用 ListCellRenderer,如关于 JList 的摇摆教程中所述。

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

Product product = (Product) value;
setText(product.getName());
return this;
于 2013-12-08T08:42:10.423 回答