我正在使用JList,并且由于JList没有(值,文本)(所以我
可以显示文本并在代码中使用值)
很难理解您的问题,但是我“怀疑”
这句话,因为您对JList模型和
其JList本身显示的文本有误解。我认为这就是为什么您需要单独的
List。
该模型可以包含所需的任何对象,并且JList还可以
根据需要显示文本,而不管对象本身如何。最后一项任务由
ListCellRenderer.
Take a look to Writing a Custom Cell
Renderer
For instance you can have this class:
class Person { String lastName; String name; public Person(String lastName, String name){ this.lastName = lastName; this.name = name; } public String getLastName(){ return this.lastName; } public String getName(){ return this.name; }}现在,您希望
JList保持
Person对象稍后可以使用它们。这一部分很简单,只需创建一个
ListModel并在其中添加元素即可:
DefaultListModel model = new DefaultListModel();model.addElement(new Person("Lennon","John"));model.addElement(new Person("Harrison","George"));model.addElement(new Person("McCartney","Paul"));model.addElement(new Person("Starr","Ringo"));But you want to display the name and last name of each
Person. Well you can
implement your own
ListCellRendererto do this:
JList list = new JList(model);list.setCellRenderer(new DefaultListCellRenderer(){ @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); if(value instanceof Person){ Person person = (Person)value; setText(person.getName() + " " + person.getLastName()); } return this; }});


