добавление элементов в JList

Я хочу добавить элементы в свой список. Мой список сначала инициализируется функцией initComponent(), автоматически вызываемой инструктором (я использую NetBeans, и все компоненты GUI инициализируются программой автоматически).

Мои вопросы:

  1. допустим, у нас есть Frame1, в этом кадре у нас есть кнопка "показывать изображения", при нажатии на нее
  2. откройте Frame2, у которого есть JList...
  3. список изображений добавлен через Frame3 успешно...

Ниже мой код, где я хочу перечислить все изображения в моем списке:

private void setImagesToList()
{
    ***//bLayer is my Business Layer and _getNomOfSelectedImg() returns number of 
    //images.***

    int imagesCount = bLayer._getNomOfSelectedImg(); 

    ***// through my searches i fount that i've to create ListModel to hold my items*** 
    DefaultListModel listModel = new DefaultListModel();

    if (imagesCount > 0) // there is/are image(s)
    {
        for(int i=0; i < imagesCount ; i++)
        {
            // ***i want to add image name and tooltip (image path) ***
            String imgName = bLayer._getImageName(i);
            String imgPath = bLayer._getImagePath(i);
            listModel.add(i, imgName);
            break;
        }
        images_List.setModel(listModel);
    }
} 

когда я запускаю этот код, он выдает исключение NullPointerException в последней строке images_List.setModel(listModel);

Что сделать, чтобы отобразить эти элементы, разрешить множественный выбор, добавить событие щелчка мыши?


person BDeveloper    schedule 25.05.2012    source источник
comment
Исключение говорит само за себя: вы получаете NPE, потому что images_List равно null. Где вы инициализируете его значение?   -  person assylias    schedule 25.05.2012
comment
@Eng Басма, пожалуйста, увеличьте коэффициент приема. Это, в свою очередь, увеличит изменение получения хороших ответов.   -  person Hidde    schedule 25.05.2012


Ответы (2)


Да, вы можете добавить всплывающие подсказки. Вам просто нужно установить текст всплывающей подсказки для компонента, возвращаемого средством визуализации. JList будет использовать всплывающую подсказку этого компонента для определения правильного текста всплывающей подсказки. Это можно увидеть в реализации JList#getTooltipText, соответствующую часть которой я скопировал.

Component rComponent = r.getListCellRendererComponent(
                       this, getModel().getElementAt(index), index,
                       lsm.isSelectedIndex(index),
                       (hasFocus() && (lsm.getLeadSelectionIndex() ==
                                       index)));

            if(rComponent instanceof JComponent) {
                MouseEvent      newEvent;

                p.translate(-cellBounds.x, -cellBounds.y);
                newEvent = new MouseEvent(rComponent, event.getID(),
                                          event.getWhen(),
                                          event.getModifiers(),
                                          p.x, p.y,
                                          event.getXOnScreen(),
                                          event.getYOnScreen(),
                                          event.getClickCount(),
                                          event.isPopupTrigger(),
                                          MouseEvent.NOBUTTON);

                String tip = ((JComponent)rComponent).getToolTipText(
                                          newEvent);

                if (tip != null) {
                    return tip;
                }

Не могли бы вы также обновить свой вопрос этими новыми вопросами, так как ваш «ответ на новый вопрос» будет плавать внизу

person Robin    schedule 25.05.2012

я нашел свою большую ошибку :( :( я вызвал функции, которые устанавливают изображения в список перед вызовом initComponent(), поэтому было выбрано исключение..

спасибо всем за ваш ответ, но у меня есть еще вопросы: 1) могу ли я добавить ToolTipText в элемент списка, я хочу добавить путь к изображению 2) что вы имели в виду о «мой коэффициент принятия» ...

person BDeveloper    schedule 25.05.2012