Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.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 Добавлено С первым разобрался, надо вот-так: <{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. Поэтому и удалить не может. Непонятно вообще как удалять строки и добавлять массивом. |
Автор: 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 при чём тут javafx? это swing |
Автор: Kamenev_D 21.12.15, 08:45 |
wind, так то всё работает. Но я пытаюсь делать через редактор форм НетБинс. А там другая история. Не дает редактировать поля, где редактор создает объявления. |