Елементите, които не са добавени към JList

Опитвам се да добавя имена на файлове към моя JList, но без успех. Ето частта от кода:


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

listLayer е JList, в който бих искал да добавя име на файл. За информация, пиша моето GUI приложение в 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

Препоръчвате ми да използвам not DefaultListModel, но ListModel?

Не знам достатъчно за останалата част от програмата ви, за да кажа. Ако имате единичен, относително статичен JList, DefaultListModel може да е перфектен. Ако вашата програма моделира постоянно променяща се селекция от File екземпляри, тогава може да искате да внедрите ListModel или дори споделен модел, както е показано тук. Последният просто препраща някои методи към изпълнението по подразбиране.

person trashgod    schedule 05.12.2011