Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > JList управление выводом


Автор: Hidrag 2.2.2007, 18:17
Есть простой класс:

Код

class Element {
     public Element() {
     }
     String name;
     boolean status;
}


Естьне сколько экземпляров такого класса, место хранения (массив, коллекция) пока не определено, выберу то что удобнее..

Мне нужно вывести все name этих классов в JList в зависимости от поля status, то есть если истина выводим, если ложь не выводим.  А также необходим метод при котором будут отображаться все элементы независимо от статуса.

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

Как это можно реализовать более грамотно? Какие будут мысли?

Автор: diablero 3.2.2007, 08:22
Все это решаеться довольно просто, необходимо написать свою модель JList
Можно реализовать модель на основе ArrayList.

Например:
Код

public class DataListModel extends AbstractListModel
{
    private ArrayList <Object> data = new ArrayList <Object> ();

    public void setDataSource(....) 
    {
        data.clear();
       //  Ваш код
       //
    }
    public int getSize()
    {
    return data.size();
    }
    public void setElementAt(Object value)
    {
        data.add(value);
    }
    public boolean containsElement(Object value)
    {
        return data.contains(value);
    }
    public Object getElementAt(int index)
    {
    return data.get(index);
    }
    public int getElementIndex(Object value)
    {
        return data.indexOf(value);
    }
    public void deleteElement(Object value)
    {
        data.remove(value);
    }
    public void deleteElement(int index)
    {
        data.remove(index);
    }
    public void clear()
    {
        data.clear();
    }
}

Автор: Hidrag 3.2.2007, 13:31
Спасибо!
Реализовал класс наследовал, как в примере, в метод setDataSource передаю свой массив объектов, там его фильтрую, и заношу нужные элементы в data, data уже не Object а Elements....  а где прописать что должно выводиться на экрна в этом листе?

нашел решение сам ... вызвать fireIntervalAdded в модели!

Автор: Hidrag 3.2.2007, 15:12
а как, при выводе всех элементов раскрасить строчки в листе в зависимотси от статуса элемента?

Автор: powerOn 3.2.2007, 16:16
Нужно написать свой renderer. Небольшой пример есть http://forum.vingrad.ru/index.php?showtopic=89738.

Автор: diablero 3.2.2007, 19:17
http://www.java2s.com/Code/JavaAPI/javax.swing/JListsetCellRendererListCellRenderercellRenderer.htm

Автор: Hidrag 4.2.2007, 20:36
Посмотрел примеры, супер! Получается внешний вид списка ограничен лишь моими знаниями и фанатазией, к сожелению от первого в большей степени...

Так вот, нашел я еще одну возможность "раскрасить" список, более просто например так:
Код

data.add("<html><font size=4 color = blue><html>"+c.getNickName());

После чего выводится строка синего цвета! Супер! Решил эксперементировать дальше, добавил тэг img src = путь к картинке ... и облом, точнее выводится "квадратик" показывая что картинка должна быть, но она не прорисовывается...

Можно ли таким образом вывести картнку?

Автор: LSD 5.2.2007, 11:04
Цитата(Hidrag @  4.2.2007,  20:36 Найти цитируемый пост)
Можно ли таким образом вывести картнку?

Посмотри http://forum.vingrad.ru/topic-134412.html.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)