我正在使用一个JList
,并且由于JList
没有(值,文本)(所以我
可以显示文本并使用我的代码中的值)
确实很难理解你的问题,但我“怀疑”你对引用的行有误解JList
显示的模型和文本JList
本身。我想这就是为什么你有一个单独的List
.
该模型可以包含您想要的任何对象JList
还可以根据需要显示文本,而不管对象本身。最后一个任务是由列表单元渲染器 http://docs.oracle.com/javase/7/docs/api/javax/swing/ListCellRenderer.html。看看编写自定义单元格渲染器 http://docs.oracle.com/javase/tutorial/uiswing/components/list.html#renderer
例如你可以有这样的课程:
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
keep 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"));
但你想显示每个人的名字和姓氏Person
。那么你可以实现你自己的ListCellRenderer
去做这个:
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;
}
});
和你的JList
将显示您想要的项目: