这是怎么回事?
我在项目中创建了一个jList,但无法检索该元素。我知道jList仅接受对象,但是我将字符串添加到列表中,因为当我添加“Discipline”对象时,我在 View 中看到类似“ Discipline {id = 21,name = DisciplineName} ”的内容。因此,我要添加字符串而不是对象。
以下是我的代码:
ArrayList<Discipline> query = myController.select();
for (Discipline temp : query){
model.addElement(temp.getNome());
}
当我获得一个元素的双击索引时,我尝试检索我的String进行查询,并了解这是什么学科。但是我遇到了一些错误,看看我已经尝试了:Object discipline = lista1.get(index);
// Error: local variable lista1 is accessed from within inner class; needs to be declared final
String nameDiscipline = (String) lista1.get(index);
// Error: local variable lista1 is accessed from within inner class; needs to be declared final
我真的不知道什么是“决赛”,但是我该怎么做才能解决这个问题?我认为的一件事是:我可以添加一个Discipline而不是String来显示给用户纪律.getName()并检索Discipline对象吗?
最佳答案
是的,添加纪律对象。一个快速的解决方案是更改Discipline的toString方法,但更好的解决方案是创建一个ListCellRenderer,以一个漂亮的String形式显示每个Discipline的数据。
这是我在我的项目中使用过的两个ListCellRenderer,用于将JList中显示的项目从文本更改为ImageIcon:
private class ImgListCellRenderer extends DefaultListCellRenderer {
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
if (value != null) {
BufferedImage img = ((SimpleTnWrapper) value).getTnImage();
value = new ImageIcon(img); // *** change value parameter to an ImageIcon
}
return super.getListCellRendererComponent(list, value, index,
isSelected, cellHasFocus);
}
}
private class NonImgCellRenderer extends DefaultListCellRenderer {
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
// all this does is use the item held by the list, here value
// to extract a String that I want to display
if (value != null) {
SimpleTnWrapper simpleTn = (SimpleTnWrapper) value;
String displayString = simpleTn.getImgHref().getImgHref();
displayString = displayString.substring(displayString.lastIndexOf("/") + 1);
value = displayString; // change the value parameter to the String ******
}
return super.getListCellRendererComponent(list, value, index,
isSelected, cellHasFocus);
}
}
它们的声明如下:
private ListCellRenderer imgRenderer = new ImgListCellRenderer();
private ListCellRenderer nonImgRenderer = new NonImgCellRenderer();
我因此使用它们:
imgList.setCellRenderer(imgRenderer);
DefaultListCellRenderer非常强大,并且知道如何正确显示String或ImageIcon(因为它基于JLabel)。
关于java - jList-添加元素并显示String?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17135357/