2012-05-22 33 views
0

我有一個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); 
} 
} 
} 

但它仍然無法正常工作。你能幫助我嗎?

回答

1

您可以使用jList.setCellRenderer(),你通過new DefaultListCellRenderer()與overrided方法

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); 
} 
+0

我編輯我的帖子,由於你的線索。它不工作,我知道這個錯誤是愚蠢的,但我找不到它。你能幫助我嗎? – Doszi89

+0

您需要調用'jList1.setCellRenderer(new JavaRenderer());'''''''''''''''''初始化jList的位置。然後,您必須使用listModel將文件添加到jList。請參閱[將項目添加到jList](http://docs.oracle.com/javase/tutorial/uiswing/components/list.html#mutable) – alaster

+0

謝謝,實際上問題出在'File file =(file)value;'因爲我毫不留情地複製它,應該有文件而不是文件。感謝您對初學者的幫助和耐心:) – Doszi89

1

您需要編寫自己的ListModel,您在那裏存儲List<File>內部並從getElementAt(int index)方法返回fileName。

1

除了這裏提供的答案是另一種方式。您可以將File對象包裝在您自己的File類中。然後重載toString()方法返回文件名。

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