这是怎么回事?
我在项目中创建了一个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/

10-10 08:11