JList:显示除存储之外的其他内容

时间:2012-05-22 18:25:47

标签: java linked-list jlist

我有一个JList组件,我想存储图像的路径,但要显示图像的名称,而不是路径。我有一个按下打开文件按钮的代码:

 public void openButtonActionPerformed() {       

    int returnVal = fc.showDialog(null, "Open");

     if (returnVal == JFileChooser.APPROVE_OPTION) { 
           file = fc.getSelectedFile();
     }
    jList1.setCellRenderer(new JavaRenderer());
}

class JavaRenderer extends DefaultListCellRenderer {

public JavaRenderer(){
    //setOpaque(true);
}
 public File file;  

 public Component getListCellRendererComponent(JList list,
                                            Object value,
                                            int index,
                                            boolean isSelected,
                                            boolean hasFocus) {

if (value instanceof File) {
  File file = (file) value;

     return super.getListCellRendererComponent(list, file.getName(), index, isSelected, hasFocus);
}else {
     return super.getListCellRendererComponent(list, value, index, isSelected, hasFocus);
}
}
}

但它仍然无效。你能帮帮我吗?

4 个答案:

答案 0 :(得分:1)

您需要编写自己的ListModel,在内部存储List<File>并从getElementAt(int index)方法返回fileName。

答案 1 :(得分:1)

您可以通过创建自己的ListCellRenderer来更改内容在JList中呈现的方式。 (看看这个:http://docs.oracle.com/javase/1.4.2/docs/api/javax/swing/ListCellRenderer.html

答案 2 :(得分:1)

您可以使用覆盖方法

传递jList.setCellRenderer()的{​​{1}}

new DefaultListCellRenderer()

getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) - 是您插入JList的对象,因此您可以存储它但显示另一个标签:

value

答案 3 :(得分:1)

除了提供的答案,这里是另一种方式。您可以将File对象包装在您自己的File类中。然后重载toString()方法以返回文件名。

class CustomFile extends File{
    public CustomFile(File f){super(f.getAbsolutePath());}
    public String toString(){return getName();}
}