繁体   English   中英

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

[英]Java Swing - DefaultListModel - Printing all object information, when i only want to print one field

我有这个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);
    }
  }

我怎样才能解决这个问题?? 我一直在尝试修复它和相关的错误两个小时almsot =(!

样本输出也是

Product [description=descrion test, name=test]

这就是它的印刷。 我只想要它打印名称。 =(!

对象也在hashmap中。 我可以遍历hashmap直到一个对象具有相同的名称值,然后使用它,但我不想这样做。 我想要一个更合适和可扩展的解决方案,因为我在思考一个方面遇到了很多麻烦。

顺便说说! 这是Swing中的GUI应用程序! 如果你想要图像,请问=)!

编辑:现在,我的列表单元格渲染器坏了! 它刚刚工作...... =(

    @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,如关于JList的swing 教程中所述。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM