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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JList, Где я мог ошибиться? 
:(
    Опции темы
XClan
Дата 18.2.2004, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Пытался создать добавление и удаление с JList, а также возможность кнопками (Up,Down) перевигать в списке выбор!
Но во время компиляции кричит :
Код

Exception in thread "main" java.lang.IllegalArgumentException: dataModel must be non null


Постараюсь выложить код в сокращенной форме:
Код

import пакетов;
...
public class JAL extends javax.swing.JFrame {
       .......
       private JList list;
       private DefaultListModel listModel;

   public JAL() {
      initComponents();

       listModel = new DefaultListModel();
       listModel.addElement("NAS: 121.12.23.12");
       listModel.addElement("NAS: 23.234.34.244");
       listModel.addListDataListener(new MyListDataListener());
       list = new JList(listModel);
       list.setSelectedIndex(0);
//        list.addListSelectionListener(this);
   }

private void initComponents() {
       .........
        jScrollPane2 = new JScrollPane(list);
        jList1 = new JList(listModel);
        jTextField4 = new javax.swing.JTextField();
        addButton = new JButton();
       addButton.addActionListener(new AddButtonListener());
       renameButton = new javax.swing.JButton();
       deleteButton = new JButton();
       deleteButton.addActionListener(new DeleteButtonListener());
       upButton = new javax.swing.JButton();
       downButton = new javax.swing.JButton();
       .........
        jList1.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_INTERVAL_SELECTION);
       jScrollPane2.setViewportView(jList1);
       ..........
       jTextField4.setColumns(11);
       jTextField4.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               jTextField4ActionPerformed(evt);
           }
       });
       ..........
       addButton.setText("Добавить");
       jPanel4.add(addButton, new org.netbeans.lib.awtextra.AbsoluteConstraints(200, 20, -1, -1));
       
       renameButton.setText("Изменить");
       jPanel4.add(renameButton, new org.netbeans.lib.awtextra.AbsoluteConstraints(320, 20, -1, -1));
       
       deleteButton.setText("Удалить");
       jPanel4.add(deleteButton, new org.netbeans.lib.awtextra.AbsoluteConstraints(440, 20, -1, -1));
       
       upButton.setMargin(new Insets(0,0,0,0));
       upButton.addActionListener(new UpDownListener());
       upButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/up.gif")));
       upButton.setText("up");
       jPanel4.add(upButton, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 20, -1, -1)); // как обычно к панели приковываем
       
       downButton.setMargin(new Insets(0,0,0,0));
       downButton.addActionListener(new UpDownListener());
       downButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/down.gif")));
       downButton.setText("down");
       jPanel4.add(downButton, new org.netbeans.lib.awtextra.AbsoluteConstraints(90, 20, -1, -1));
      ........
      pack();
   }
     .........
    //****   начало jList (Aggreg)   ****//
   
   class MyListDataListener implements ListDataListener {
       public void contentsChanged(ListDataEvent e) {
           jTextArea2.append("contentsChanged: " + e.getIndex0() +
                      ", " + e.getIndex1() + "\n");
       }
       public void intervalAdded(ListDataEvent e) {
           jTextArea2.append("intervalAdded: " + e.getIndex0() +
                      ", " + e.getIndex1() + "\n");
       }
       public void intervalRemoved(ListDataEvent e) {
           jTextArea2.append("intervalRemoved: " + e.getIndex0() +
                      ", " + e.getIndex1() + "\n");
       }
   }

   class DeleteButtonListener implements ActionListener {
       public void actionPerformed(ActionEvent e) {
           /*
            * This method can be called only if
            * there's a valid selection,
            * so go ahead and remove whatever's selected.
            */

           ListSelectionModel lsm = list.getSelectionModel();
           int firstSelected = lsm.getMinSelectionIndex();
           int lastSelected = lsm.getMaxSelectionIndex();
           listModel.removeRange(firstSelected, lastSelected);

           int size = listModel.size();

           if (size == 0) {
           //List is empty: disable delete, up, and down buttons.
               deleteButton.setEnabled(false);
               upButton.setEnabled(false);
               downButton.setEnabled(false);

           } else {
           //Adjust the selection.
               if (firstSelected == listModel.getSize()) {
               //Removed item in last position.
                   firstSelected--;
               }
               list.setSelectedIndex(firstSelected);
           }
       }
   }

   /** A listener shared by the text field and add button. */
   class AddButtonListener implements ActionListener {
       public void actionPerformed(ActionEvent e) {
           if (jTextField4.getText().equals("")) {
           //User didn't type in a name...
               Toolkit.getDefaultToolkit().beep();
               return;
           }

           int index = list.getSelectedIndex();
           int size = listModel.getSize();

           //If no selection or if item in last position is selected,
           //add the new one to end of list, and select new one.
           if (index == -1 || (index+1 == size)) {
               listModel.addElement(jTextField4.getText());
               list.setSelectedIndex(size);

           //Otherwise insert the new one after the current selection,
           //and select new one.
           } else {
               listModel.insertElementAt(jTextField4.getText(), index+1);
               list.setSelectedIndex(index+1);
           }
       }
   }

   //Listen for clicks on the up and down arrow buttons.
   class UpDownListener implements ActionListener {
       public void actionPerformed(ActionEvent e) {
           //This method can be called only when
           //there's a valid selection,
           //so go ahead and move the list item.
           int moveMe = list.getSelectedIndex();

           if (e.getActionCommand().equals("")) {
           //UP ARROW BUTTON
               if (moveMe != 0) {    
               //not already at top
                   swap(moveMe, moveMe-1);
                   list.setSelectedIndex(moveMe-1);
                   list.ensureIndexIsVisible(moveMe-1);
               }
           } else {
           //DOWN ARROW BUTTON
               if (moveMe != listModel.getSize()-1) {
               //not already at bottom
                   swap(moveMe, moveMe+1);
                   list.setSelectedIndex(moveMe+1);
                   list.ensureIndexIsVisible(moveMe+1);
               }
           }
       }
   }

   //Swap two elements in the list.
   private void swap(int a, int b) {
       Object aObject = listModel.getElementAt(a);
       Object bObject = listModel.getElementAt(b);
       listModel.set(a, bObject);
       listModel.set(b, aObject);
   }

   //Listener method for list selection changes.
   public void valueChanged(ListSelectionEvent e) {
       if (e.getValueIsAdjusting() == false) {

           if (list.getSelectedIndex() == -1) {
           //No selection: disable delete, up, and down buttons.
               deleteButton.setEnabled(false);
               upButton.setEnabled(false);
               downButton.setEnabled(false);
               jTextField4.setText("");

           } else if (list.getSelectedIndices().length > 1) {
           //Multiple selection: disable up and down buttons.
               deleteButton.setEnabled(true);
               upButton.setEnabled(false);
               downButton.setEnabled(false);

           } else {
           //Single selection: permit all operations.
               deleteButton.setEnabled(true);
               upButton.setEnabled(true);
               downButton.setEnabled(true);
               jTextField4.setText(list.getSelectedValue().toString());
           }
       }
   }

/*   Пришлось отключить из-за ошибки в  this.getCodeBase();
       protected URL getURL(String filename) {
       URL codeBase = this.getCodeBase();
       URL url = null;

       try {
           url = new URL(codeBase, filename);
       } catch (java.net.MalformedURLException e) {
           System.out.println("Couldn't create image: badly specified URL");
           return null;
       }

       return url;
   }
*/    
//****   конец JList (Aggreg)    ****///
}



--------------------
rm -rf /bin/laden
PM MAIL WWW   Вверх
DarkDS
Дата 18.2.2004, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

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



Код

  public JAL() {
     [B]initComponents();[/B] [I]//1[/I]

      [B]listModel = new DefaultListModel();[/B][I]//3[/I]
      listModel.addElement("NAS: 121.12.23.12");
      listModel.addElement("NAS: 23.234.34.244");
      listModel.addListDataListener(new MyListDataListener());
      list = new JList(listModel);
      list.setSelectedIndex(0);
//        list.addListSelectionListener(this);
  }

private void initComponents() {
      .........
       jScrollPane2 = new JScrollPane(list);
      [B] jList1 = new JList(listModel);[/B][I]//2[/I]
       jTextField4 = new javax.swing.JTextField();

Когда ты используешь лист модель (2) она еще не инициализированна. То есть тебе нужно выхов Инита (1) нужно делать после инициализации модели (3)
PM MAIL   Вверх
XClan
Дата 20.2.2004, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Тьфу вчера не было инета! Исправил! Все равно кричит, что dataModel не должна быть пустым!
Просто черт бы побрал, вроде бы он не пустой!
исправил твоим советом на
Код

public JAL() {
    initComponents();//1
              ..............
 }

private void initComponents() {
     .........
      jScrollPane2 = new JScrollPane(list);
     jList1 = new JList(listModel);//2
     listModel = new DefaultListModel();//3
     listModel.addElement("NAS: 121.12.23.12");
     listModel.addElement("NAS: 23.234.34.244");
     listModel.addListDataListener(new MyListDataListener());
     list = new JList(listModel);
     list.setSelectedIndex(0);
//        list.addListSelectionListener(this);
      jTextField4 = new javax.swing.JTextField();


-------------
Все равно ничего не изменилось sad.gif


--------------------
rm -rf /bin/laden
PM MAIL WWW   Вверх
DarkDS
Дата 20.2.2004, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

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



Цитата(XClan @ 20.2.2004, 13:45)
Тьфу вчера не было инета! Исправил! Все равно кричит, что dataModel не должна быть пустым!
Просто черт бы побрал, вроде бы он не пустой!
исправил твоим советом на
Код

public JAL() {
    initComponents();//1
              ..............
 }

private void initComponents() {
     .........
      jScrollPane2 = new JScrollPane(list);
     jList1 = new JList(listModel);//2
     listModel = new DefaultListModel();//3
     listModel.addElement("NAS: 121.12.23.12");
     listModel.addElement("NAS: 23.234.34.244");
     listModel.addListDataListener(new MyListDataListener());
     list = new JList(listModel);
     list.setSelectedIndex(0);
//        list.addListSelectionListener(this);
      jTextField4 = new javax.swing.JTextField();


-------------
Все равно ничего не изменилось sad.gif

Тама цифры были - как у тебя сейчас есть!! smile.gif Нужно сделать так:
Код

public JAL() {
     [B]listModel = new DefaultListModel();[/B][I]//3[/I]
     listModel.addElement("NAS: 121.12.23.12");
     listModel.addElement("NAS: 23.234.34.244");
     listModel.addListDataListener(new MyListDataListener());

    [B]initComponents();[/B] [I]//1[/I]

     list = new JList(listModel);
     list.setSelectedIndex(0);
//        list.addListSelectionListener(this);
 }

private void initComponents() {
     .........
      jScrollPane2 = new JScrollPane(list);
     [B] jList1 = new JList(listModel);[/B][I]//2[/I]
      jTextField4 = new javax.swing.JTextField();

или так:
Код

public JAL() {
    initComponents();//1
              ..............
 }

private void initComponents() {
     .........
      jScrollPane2 = new JScrollPane(list);
     listModel = new DefaultListModel();//3
     listModel.addElement("NAS: 121.12.23.12");
     listModel.addElement("NAS: 23.234.34.244");
     listModel.addListDataListener(new MyListDataListener());
     list = new JList(listModel);
     list.setSelectedIndex(0);
//        list.addListSelectionListener(this);
     jList1 = new JList(listModel);//2
      jTextField4 = new javax.swing.JTextField();


PM MAIL   Вверх
XClan
Дата 20.2.2004, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Все заработало! Спасибо! Я просто не там правку делал! smile.gif)


--------------------
rm -rf /bin/laden
PM MAIL WWW   Вверх
XClan
Дата 24.3.2004, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вернулся я назад и поправил кое-что! Убрав
Код

    listModel.addElement("NAS: 121.12.23.12");
    listModel.addElement("NAS: 23.234.34.244");


вроде не кричит, НО теперь невозможно добавить новые объекты к list от addButton!!!!

при возврате вышеуказанного кода все встало на свои места!

Как исправить! Мне нужно чтобы пи запуске jList был пустой!


--------------------
rm -rf /bin/laden
PM MAIL WWW   Вверх
XClan
Дата 25.3.2004, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Теперь все ок!


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

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

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


 




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


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

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