Элементы, не добавленные в JList - PullRequest
2 голосов
/ 05 декабря 2011

Я пытаюсь добавить имена файлов в мой 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 объявлен в неизменяемой части кода следующим образом: приватный javax.swing.JList listLayer;

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

Ответы [ 2 ]

2 голосов
/ 05 декабря 2011

Спасибо за публикацию кода.Теперь вполне возможно, что мы можем ответить на ваш вопрос.Проблема, которую я вижу, состоит в том, что вы воссоздаете 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());

} 
1 голос
/ 05 декабря 2011

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

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

...