Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> FilteringJList, удаление элемента 
V
    Опции темы
vodorosle
Дата 1.1.2007, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 10.12.2006

Репутация: нет
Всего: нет



Имеется класс, многие наверное видели...
Код

import javax.swing.*;
   import javax.swing.text.*;
   import javax.swing.event.*;
   import java.util.*;
   
   public class FilteringJList extends JList {
     private JTextField input;
   
   public FilteringJList() {
     FilteringModel model = new FilteringModel();
     setModel(new FilteringModel());
   }
   
   
    public void installJTextField(JTextField input) {
      if (input != null) {
        this.input = input;
        FilteringModel model = (FilteringModel)getModel();
        input.getDocument().addDocumentListener(model);
      }
    }
   
  
    public void uninstallJTextField(JTextField input) {
      if (input != null) {
        FilteringModel model = (FilteringModel)getModel();
        input.getDocument().removeDocumentListener(model);
        this.input = null;
      }
    }
   
   
   public void setModel(ListModel model) {
     if (!(model instanceof FilteringModel)) {
       throw new IllegalArgumentException();
     } else {
       super.setModel(model);
     }
   }
   
   public void addElement(Object element) {
     ((FilteringModel)getModel()).addElement(element);
   }
   
   private class FilteringModel extends AbstractListModel
       implements DocumentListener {
     List list;
     List filteredList;
     String lastFilter = "";
   
     public FilteringModel() {
       list = new ArrayList();
       filteredList = new ArrayList();
     }
   
     public void addElement(Object element) {
       list.add(element);
       filter(lastFilter);
     }
   
     public int getSize() {
       return filteredList.size();
     }
   
     public Object getElementAt(int index) {
       Object returnValue;
       if (index < filteredList.size()) {
         returnValue = filteredList.get(index);
       } else {
         returnValue = null;
       }
       return returnValue;
     }
   
     void filter(String search) {
        filteredList.clear();
       for (Iterator i=list.iterator();i.hasNext();) {
        Object element=i.next();
          if (element.toString().indexOf(search, 0) != -1) {
                filteredList.add(element);
          }
        }
        fireContentsChanged(this, 0, getSize());
     }
   
   
     public void insertUpdate(DocumentEvent event) {
       Document doc = event.getDocument();
       try {
         lastFilter = doc.getText(0, doc.getLength());
         filter(lastFilter);
       } catch (BadLocationException ble) {
         System.err.println("Bad location: " + ble);
       }
     }
   
     public void removeUpdate(DocumentEvent event) {
       Document doc = event.getDocument();
       try {
         lastFilter = doc.getText(0, doc.getLength());
         filter(lastFilter);
       } catch (BadLocationException ble) {
         System.err.println("Bad location: " + ble);
       }
     }
   
     public void changedUpdate(DocumentEvent event) {
     }
    }
   }

Помогите, пожалуйста с удалением элемента....что нужно дописать...сам пробовал не получилось...
PM MAIL   Вверх
powerOn
Дата 2.1.2007, 02:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 31
Всего: 159



Цитата(vodorosle @  1.1.2007,  23:39 Найти цитируемый пост)
Помогите, пожалуйста с удалением элемента....что нужно дописать...сам пробовал не получилось... 

Что конкретно смущает? 

Удаляй элемент из модели. Модель, как таковая,  у тебя:
Код

private class FilteringModel extends AbstractListModel
       implements DocumentListener {
     List list;  //  <-- Это главный контейнер, который хранит все элементы ??
     List filteredList;
     String lastFilter = "";


Напиши метод класса FilteringModel, который бы удалял из list определенный элемент. И будет тебе удаление.


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
vodorosle
Дата 2.1.2007, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 10.12.2006

Репутация: нет
Всего: нет



дописываю метод
Код

public void remove(Object element) {
     ((FilteringModel)getModel()).remove(element);
   }


а затем в Model
Код

public void remove(Object element){
    filteredList.remove(element);
    filter(lastFilter);
}


в списке объекты класса Person(от Object)
в нем 
String name;
String email;

удаляю 
Person selected =(Person)(((JList)e.getSource()).getSelectedValue());
listName.remove(selected); 

ошибка ClassCastException
PM MAIL   Вверх
powerOn
Дата 2.1.2007, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 31
Всего: 159



Цитата(vodorosle @  2.1.2007,  16:26 Найти цитируемый пост)
ошибка ClassCastException 

Выложи весь стек-трейс.


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
vodorosle
Дата 2.1.2007, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 10.12.2006

Репутация: нет
Всего: нет



java.lang.ClassCastException     
     at MyFrame$4.actionPerformed(MyFrame.java:180)
     at javax.swing.AbstractButton.fireActionPerformed(Unkn
     at javax.swing.AbstractButton$ForwardActionEvents.actiSource)
     at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
     at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
     at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
     at java.awt.Component.processMouseEvent(Unknown Source)
     at java.awt.Component.processEvent(Unknown Source)
     at java.awt.Container.processEvent(Unknown Source)
     at java.awt.Component.dispatchEventImpl(Unknown Source)
     at java.awt.Container.dispatchEventImpl(Unknown Source)
     at java.awt.Component.dispatchEvent(Unknown Source)
     at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
     at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
     at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
     at java.awt.Container.dispatchEventImpl(Unknown Source)
     at java.awt.Window.dispatchEventImpl(Unknown Source)
     at java.awt.Component.dispatchEvent(Unknown Source)
     at java.awt.EventQueue.dispatchEvent(Unknown Source)
     at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)

     at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
     at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
     at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
     at java.awt.EventDispatchThread.run(Unknown Source)

PM MAIL   Вверх
powerOn
Дата 2.1.2007, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 31
Всего: 159



 smile  Самое главное и не выложил. Здесь интересно из-за какого приведения падает:  Person или JList.
Попробуй след код, и посмотри какое преобразование ты делаешь не верно.

Код

System.out.println(e.getSource().getClass().getName());
JList list  = (JList) e.getSource();
System.out.println(list.getSelectedValue().getClass().getName());
Person selected =(Person) list.getSelectedValue();




--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
vodorosle
Дата 2.1.2007, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 10.12.2006

Репутация: нет
Всего: нет



Спасибо!!!

Попробовал, похоже, что на JList.

Написал только перед ошибками javax.swing.JButton, что собственно и должен был написать....

Может есть какие-нибудь мысли??? Похоже, когда нажимаю на кнопку, снимается выделение как таковое...или я не прав???
PM MAIL   Вверх
powerOn
Дата 2.1.2007, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 31
Всего: 159



Цитата(vodorosle @  2.1.2007,  20:58 Найти цитируемый пост)
Может есть какие-нибудь мысли??? Похоже, когда нажимаю на кнопку, снимается выделение как таковое...или я не прав??? 

нет, выделение то остается. Где объявлен компонент JList доступ к которому ты пытаешься получить? Объявнение лучше вынести на более высокий уровень видимости, чтобы можно было  обращаться непосредственно к компоненту. Тогда можно избавиться от e.getSource().

Выложи код этой формы целиком, может проще будет так подправить. А то совершенно не понятно что у тебя там написано.




--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
vodorosle
Дата 4.1.2007, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 10.12.2006

Репутация: нет
Всего: нет



Спасибо!!! рекомендации помогли, все заработало!!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0613 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.