Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Java > JList


Автор: Kamenev_D 17.12.15, 08:26
Добрый день уважаемые. Что-то не пойму я вообще этот хитрый компонент. Даже просто как добавить и удалить строки.
Примеры которые в книгах или мануалах для NetBeans не подходят, ибо нельзя редактировать то, что создает ИДЕ. А что бы работало как раз там и надо редактировать. К примеру добавление:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    DefaultListModel listModel = new DefaultListModel();
    JList list = new JList(listModel);
     
    for (int i = 0; i < 25; i++) {
        listModel.addElement("Элемент списка " + i);
    }

И это будет работать, но не в NetBeans. Ибо если пихать этот код в кнопку, то не видно существующих Листов. Если у меня уже есть на форме jList1, то связать его с listModel нельзя. И добавить вручную не могу, ибо не дает редактировать.

Можно добавлять вот так, как делает сам NetBeans. Но это какой то мега-изврат.
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
     jList1.setModel(new AbstractListModel() {
                String strings[] = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
                public int getSize() { return strings.length; }
                public Object getElementAt(int i) { return strings[i]; }
            });

Это работает, но непонятно как удалять и вообще работать со списком.
В общем кто знает как нормально можно добавлять и удалять строки?

Вот пример через Вектор, но проблема та же что и в первом варианте. По непонятно причине, не видит существующий лист на форме.
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
           JList list;
            Vector v = new Vector();
            v.add("1");
            v.add("2");
            v.add("3");
            v.add("4");
            v.add("5");
            list = new JList(v);
           // jList1(v);

И вот не видит он jList1 :wall:

Добавлено
С первым разобрался, надо вот-так:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
     DefaultListModel dlm = new DefaultListModel();
     jList1.setModel(dlm);
     dlm.addElement("1234");

Но как добавить массив?

Добавлено
Да и не удаляются строки
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
     DefaultListModel dlm = new DefaultListModel();
     jList1.setModel(dlm);
     dlm.remove(1);


Типа выход за границы. Хотя строки в списке есть. По непонятной причине jList1.getSelectedIndex()возращает всегда -1.
Поэтому и удалить не может. Непонятно вообще как удалять строки и добавлять массивом. :wall: :wall: :wall:

Автор: Kamenev_D 17.12.15, 10:48
Фиг с ним , с массивом, сделал так:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
      class AddStringToList
    {
        JList obj;
          
        AddStringToList(JList obj,String Array[])
        {
            this.obj = obj;
            
             obj.setModel(new AbstractListModel() {
                String[] strings = Array;
                @Override
                public int getSize() { return strings.length; }
                @Override
                public Object getElementAt(int i) { return strings[i]; }
            });
            
            
        }
    }

Ну и вызов в обработчике кнопки
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
     String Arr[] = { "Строка", "Item 2", "Item 3", "Item 4", "Item 5" };
     AddStringToList addStringToList = new AddStringToList(jList1,Arr);


Но как удалять и вставлять новые строки в определенные позиции?

Автор: Kamenev_D 17.12.15, 14:39
То-ли компонент какой-то глючный, то-ли лыжи не едут. Запутался вообще. Ведет он себя странно.
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
     private void jList1ValueChanged(ListSelectionEvent evt)
     {                                    
            
            int idx = jList1.getSelectedIndex();
            if(idx != -1) { System.out.println("Selected:" + Arr[idx]); }
            else System.out.println("Selected list");
          
          
        }

Результат получается ещё интереснее.
Он задвоеный. Т.к клацаешь на листбоксе этом, и выводит два раза выбранную строку. Почему?
Неудивительно что не удаляется и вылетает за границы массива.

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
              DefaultListModel dlm = new DefaultListModel();
              jList1.setModel(dlm);
              int del = jList1.getSelectedIndex();
              if(del == -1)System.out.println("-1");
              else System.out.println(del);

Угадайте что возвращается? Правильно! -1!

П.С: С этом листом не работал что-ли никто и никогда?
Если ни кто не знает как с ним работать, то может хоть подскажете аналог этого глючного листа? JavaFX List как работает?
Кто-то пробовал?

Автор: wind 18.12.15, 19:30
http://www.java2s.com/Code/Java/Swing-JFC/...ltListModel.htm

Цитата Kamenev_D @
JavaFX List

при чём тут javafx? это swing

Автор: Kamenev_D 21.12.15, 08:45
wind, так то всё работает. Но я пытаюсь делать через редактор форм НетБинс. А там другая история.
Не дает редактировать поля, где редактор создает объявления.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)