是的,添加 Discipline 对象。一个快速的解决方法是更改 Discipline 的 toString 方法,但更好的解决方法是创建一个 ListCellRenderer,以一个漂亮的字符串显示每个 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)。