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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ошибка при удалении элемента из JList 
V
    Опции темы
Entwickler
Дата 15.9.2008, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Привет!!!
Есть маленькая проблемка... при удалении элемента из JLista происходит ошибка... что то с JLabel не в норме... если в 
Код

public void valueChanged(ListSelectionEvent e) {

прокоментировать строчку:
Код

myCityLabel.setText(myJList.getSelectedValue().toString()+"");

то всё работает прекрассно!!!
вот весь код:
Код

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class MyJList extends JPanel {

    private JList myJList = null;
    private DefaultListModel myModel = null;
    private JTextField cityName = null;
    private JButton addCity = null;
    private JButton deleteCity = null;
    private JSplitPane splitPane = null;
    private JPanel myButtonPanel = null;
    private JLabel myCityLabel = null;
    private JScrollPane scrollPane = null;

    public MyJList() {
        super(new BorderLayout());

        myModel = new DefaultListModel();
        myModel.addElement("Рудный");
        
        myJList = new JList(myModel);
        myJList.setVisibleRowCount(5);
        myJList.addListSelectionListener(new JListListener());
        
        scrollPane = new JScrollPane(myJList);

        myButtonPanel = new JPanel(new GridLayout());

        cityName = new JTextField();
        addCity = new JButton("Добавить город");
        addCity.addActionListener(new AddButtonListener());
        deleteCity = new JButton("Удалить город");
        deleteCity.addActionListener(new DeleteButtonListener());
        
        myButtonPanel.add(cityName);
        myButtonPanel.add(addCity);
        myButtonPanel.add(deleteCity);
        
        myCityLabel = new JLabel();
        myCityLabel.setOpaque(true);
        
        splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,scrollPane,myCityLabel);
        splitPane.setOneTouchExpandable(true);
        splitPane.setDividerLocation(150);
        
        add(myButtonPanel,BorderLayout.PAGE_START);
        add(splitPane, BorderLayout.CENTER);
        
    }

    class JListListener implements ListSelectionListener {

        public void valueChanged(ListSelectionEvent e) {
            int index = myJList.getSelectedIndex();
            myCityLabel.setText(myJList.getSelectedValue().toString()+"");
        }
    }

    class AddButtonListener implements ActionListener {

        public void actionPerformed(ActionEvent e) {
            myModel.addElement(cityName.getText().toString());
            cityName.setText("");
        }
    }

    class DeleteButtonListener implements ActionListener {

        public void actionPerformed(ActionEvent e) {
            myCityLabel.setText("");
            int index = myJList.getSelectedIndex();
            myModel.remove(index);
        }
    }
}

а вот код главного класса:
Код

import javax.swing.*;

public class MyMainClass {

    public static void main(String[] args) {
        
        JFrame frame = new JFrame("Тренировка");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        JComponent myComponent = new MyJList();
        myComponent.setOpaque(true);
        frame.setContentPane(myComponent);
        
        frame.pack();
        frame.setVisible(true);
    }
}

PM MAIL   Вверх
SaSho
Дата 16.9.2008, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Судя по всему, там не в JLabel не впорядке, а при удалении элемента возникает NPE, т.к. myJList.getSelectedValue() возвращает null.
Попробуй изменить:
Код

            int index = myJList.getSelectedIndex();
            myCityLabel.setText(myJList.getSelectedValue().toString()+"");

на 
Код

          if (!myJList.isSelectionEmpty())
            myCityLabel.setText(myJList.getSelectedValue().toString()+"");


А ещё здесь будет возникать ошибка:
Код

    class DeleteButtonListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            myCityLabel.setText("");
            int index = myJList.getSelectedIndex();
            myModel.remove(index);
        }

Следует совершить проверку:
Код

            int index = myJList.getSelectedIndex();
            if (index > -1 )
               myModel.remove(index);


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


Опытный
**


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

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



хм...заработало... smile огромное спасибо!!!
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.1030 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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