JList选择项目为String – 奇怪的结果:Donnees.Marques@3d5bac58
我试试这个,结果不是我的项目的价值,而是像这样的价值Donnees.Marques@3d5bac58
listCategories.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent arg0) { String selectedCategories = listCategories.getSelectedValue().toString(); System.out.println(selectedCategories); } });
默认情况下,在您自己的对象上使用.toString()
方法时,您将其内存地址打印为字符串。 这与将两个对象与.equals()
而不是==
进行比较的原因相同,因为您要篡改的默认对象是对象内存地址。
要修复此问题,您需要覆盖超级Object
的toString
元数据,如下所示:
public class ListModel { // ... @Override public String toString() { String text = "I want to print this when I call listModel.toString()"; return text; } }
JList的默认渲染器显示要添加到列表的Object的toString()实现。
您需要为JList创建自定义渲染器,因为您使用的是自定义对象。
有关更多信息和示例,请阅读有关如何编写自定义渲染器的部分。
String selectedCategories = listCategories.getSelectedValue().toString(); System.out.println(selectedCategories);
如果要显示对象的值,则需要执行以下操作:
Donnes.Marques item = (Donnes.Margues)listCategories.getSelectedValue(); System.out.println(item.getSomeProperty());
或者,您可以覆盖Donne.Marquee类的toString()方法。
也许尝试这样的事情。
DefaultListModel listModel=new DefaultListModel(); jList1.setModel(listModel); int index = jList1.locationToIndex(evt.getPoint()); String classFromList =listModel.getElementAt(index).toString();
我想,你应该在你的类中覆盖toString()方法。 例
MyObject myObj = listCategories.getSelectedValue();
然后
public class MyObject { public String firstName; public String lastName; public int age; public MyObject() { } @Override public String toString() { // write your own parametrs like this : return firstName+" "+lastName; } }