0

我有一个 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

4 回答 4

1

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

class CustomFile extends File{
    public CustomFile(File f){super(f.getAbsolutePath());}
    public String toString(){return getName();}
}
于 2012-05-22T18:48:58.723 回答
1

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

于 2012-05-22T18:30:59.340 回答
1

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

于 2012-05-22T18:31:00.760 回答
1

您可以使用覆盖方法jList.setCellRenderer()传递的位置new DefaultListCellRenderer()

getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)

value- 是您插入到 JList 的对象,因此您可以存储它但显示另一个标签:

if (value instanceof File) {
   File file = (File) value;
   return super.getListCellRendererComponent(list, file.getName(), index, isSelected, cellHasFocus);
} else {
   return super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
}
于 2012-05-22T18:34:08.173 回答