2012-05-22 2 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() с перекрытым методом

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 (новый JavaRenderer());' только один раз, где вы инициализируете свой jList. Затем вы должны добавить файл в jList, используя listModel. См. [Добавление элементов в jList] (http://docs.oracle.com/javase/tutorial/uiswing/components/list.html#mutable) – alaster

+0

Спасибо, на самом деле проблема была в 'File file = (файле) value;' потому что Я бездумно скопировал его, и вместо файла должен был Файл. Спасибо за помощь и терпение для новичков:) – Doszi89

1

Вам необходимо написать собственный ListModel, где вы можете хранить List<File> внутри и вернуть fileName из getElementAt(int index).

1

В дополнение к приведенным здесь ответам это другой способ. Вы можете обернуть объект File в свой собственный класс File. Затем перегрузите метод toString(), чтобы вернуть имя файла.

class CustomFile extends File{ 
    public CustomFile(File f){super(f.getAbsolutePath());} 
    public String toString(){return getName();} 
} 
Смежные вопросы