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()而不是==进行比较的原因相同,因为您要篡改的默认对象是对象内存地址。

要修复此问题,您需要覆盖超级ObjecttoString元数据,如下所示:

 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; } }