Элементы, не добавленные в JList

Я пытаюсь добавить имена файлов в свой JList, но безуспешно. Вот кусок кода:


DefaultListModel model = new DefaultListModel();
listLayer.setModel(model);
model.addElement(file.getName());

listLayer - это JList, в который я хотел бы добавить имя файла. Для информации, я пишу свое приложение с графическим интерфейсом в netBeans, поэтому я не могу создать новый объект JList в этом коде, поскольку он уже был создан автоматически при добавлении JList в мой макет. Поэтому я могу просто получить к нему доступ через его методы.

Большое спасибо, Михал.

-------------------------------------------------------------------------

Хорошо, я постараюсь расширить его больше:

private void openActionPerformed(java.awt.event.ActionEvent evt) {                                     

    JFileChooser fileChooser = new JFileChooser("C:/");

    FileFilter filter1 = new MyCustomFilter();
    fileChooser.setFileFilter(filter1);

    int returnVal = fileChooser.showOpenDialog(this);

    if (returnVal == JFileChooser.APPROVE_OPTION) {
            File file = fileChooser.getSelectedFile();

            //String[] tokens = file.getName().split(".");
            //String name = tokens[0];

            DefaultListModel model = new DefaultListModel();
            listLayer.setModel(model);
            model.addElement(file.getName());

    } else {
        System.out.println("File access cancelled by user.");
        }
} 

и да, мой JList с именем listLayer объявлен в неизменяемой части кода следующим образом: private javax.swing.JList listLayer;

Еще раз спасибо за любую помощь. Михал


person MichalB    schedule 05.12.2011    source источник
comment
Я понятия не имею, почему ваш код не работает, основываясь на том, что вы опубликовали.   -  person Hovercraft Full Of Eels    schedule 05.12.2011
comment
Голосуйте за добавление важного кода - спасибо!   -  person Hovercraft Full Of Eels    schedule 05.12.2011
comment
Не позволяйте дизайнеру GUI быть препятствием.   -  person trashgod    schedule 05.12.2011


Ответы (2)


Спасибо, что разместили больше кода. Теперь, вполне возможно, мы сможем ответить на ваш вопрос. Проблема, которую я вижу, заключается в том, что вы воссоздаете DefaultListModel каждый раз, когда нажимаете кнопку, и устанавливаете JList с этой новой моделью, эффективно удаляя все данные, которые ранее хранились в списке. Чтобы избежать этого, просто получите модель, которая уже есть в JList, которая должна быть DefaultListModel, и добавьте в нее элементы. Вам нужно будет преобразовать объект, возвращаемый getModel(), поскольку согласно API Java знает, что это только объект ListModel, а ListModel не имеет метода addElement(...), который есть у DefaultListModel.

Что-то, возможно, так:

if (returnVal == JFileChooser.APPROVE_OPTION) {
        File file = fileChooser.getSelectedFile();

        // note the cast since getModel() only returns a ListModel
        DefaultListModel model = (DefaultListModel)listLayer.getModel(); // changed**

        model.addElement(file.getName());

} 
person Hovercraft Full Of Eels    schedule 05.12.2011
comment
Большое спасибо за быстрый ответ, но он все еще не работает. не знаю в чем может быть проблема. Может быть, это поможет, если я скажу, что мой JList определен внутри JPanel, но не знаю, связана ли эта информация с возникшей проблемой (думаю, что нет). - person MichalB; 05.12.2011
comment
+1 хороший улов. Я думаю, что это связанный пример. - person trashgod; 05.12.2011
comment
@trashgod - в чем вы видите связь между моей проблемой и проблемой, которую вы показали, пожалуйста? Спасибо. - person MichalB; 05.12.2011
comment
@MichalB: Ваша программа моделирует набор файлов с использованием DefaultListModel, который привязан к определенному компоненту и скрывает несколько устаревшую реализацию с использованием Vector. List<File> может быть более гибким. - person trashgod; 05.12.2011
comment
@trashgod - значит, если я правильно понял, вы рекомендуете мне использовать не DefaultListModel, а ListModel? - person MichalB; 05.12.2011

Вы рекомендуете мне использовать не DefaultListModel, но ListModel?

Я недостаточно знаю об остальной части вашей программы, чтобы что-то сказать. Если у вас есть один относительно статичный JList, DefaultListModel может быть идеальным. Если ваша программа моделирует постоянно меняющийся набор экземпляров File, вы можете реализовать ListModel или даже общую модель, как показано здесь. Последний просто перенаправляет некоторые методы в реализацию по умолчанию.

person trashgod    schedule 05.12.2011