Добавление значков к каждому элементу списка - PullRequest
2 голосов
/ 27 июля 2011

Я хочу добавить значок к каждому элементу в списке изображение.Это мой код для создания списка:

    Form f3=new Form("DEMO FORM");
    f3.setScrollable(true);
    f3.setLayout(new BorderLayout());
    f3.setLayout(new BoxLayout(BoxLayout.Y_AXIS));


     String items[] = {"one","two","three","four"};
     DefaultListModel myListModel = new DefaultListModel(items);
     List lst=new List(myListModel);

    f3.addComponent(lst);
    f3.show();

Как я могу это сделать?

Ответы [ 3 ]

3 голосов
/ 31 июля 2011

Использовать этот рендерер списка

import com.sun.lwuit.Component;
import com.sun.lwuit.Font;
import com.sun.lwuit.Image;
import com.sun.lwuit.Label;
import com.sun.lwuit.List;
import com.sun.lwuit.list.ListCellRenderer;
import com.sun.lwuit.plaf.Border;
import java.io.IOException;
public class MyListRenderer extends Label implements ListCellRenderer {

    private Image[] images;
    /** Creates a new instance of MyListRenderer */

    public MyListRenderer() {
        super("");
        images = new Image[2];
        try {
            images[0] = Image.createImage("/on.png");
            images[1] = Image.createImage("/off.png");
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    public Component getListCellRendererComponent(List list, Object value, int index, boolean isSelected) {
        setText(value.toString());
        //getStyle().setFont(Font.createSystemFont(Font.FACE_SYSTEM, Font.STYLE_BOLD,Font.SIZE_MEDIUM));
        if (isSelected) {
            setFocus(true);
            setIcon(images[1]);
            getStyle().setBgColor(0xffcc99);
            getStyle().setBgTransparency(55);
            getStyle().setBorder(Border.createRoundBorder(15, 15, 0xff9900, true));
        } else {
            setFocus(false);
            setIcon(images[0]);
            getStyle().setBgColor(0xffffff);
            getStyle().setFgColor(0x000000);
            getStyle().setBorder(Border.createRoundBorder(15, 15, 0xffcc99, true));
            getStyle().setBgTransparency(255);
        }
        return this;
    }

    public Component getListFocusComponent(List list) {
        setIcon(images[1]);
        setText("");
        getStyle().setBgColor(0x0000ff);//no effect
        setFocus(true);
        getStyle().setBgTransparency(100);
        return this;
    }
}

Вы можете удалить нежелательные украшения из этого рендерера: изменение цвета на фокусе и т. Д., ... Я также дал код для двух разных значков для невыбранного и выбранного спискавещь.Затем установите средство визуализации списка следующим образом:

lst.setListCellRenderer(new MyListRenderer());
2 голосов
/ 28 июля 2011

Вам необходимо поместить данные изображения в модель или предоставить средство визуализации для извлечения и применения этих данных. Примеры для этого можно найти в демонстрационной программе LWUIT, где у вас есть демонстрационная программа рендеринга или демонстрационная программа Scrolling, демонстрирующие списки со значками и различными макетами ввода.

0 голосов
/ 06 марта 2012

Я использовал более новый 'Generic List Cell Renderer' для создания миниатюр (иконок) в списке. Я нашел, что это легче реализовать, чем другие варианты для рендеринга списка. Следующая ссылка содержит пример кода, чтобы показать, как создать список, используя эту технику. http://codenameone.blogspot.in/2011/03/list-rendering-easy-way-generic-list.html

Чтобы показать миниатюру, я сделал следующее, что довольно много в LWUIT.

 private Container createGenericRendererContainer() throws IOException {

        Container c = new Container(new BorderLayout());
        c.setUIID("ListRenderer");

        Label xname = new Label("");
        Label description = new Label();
        //create box layout to contain name and description
        Container cnt = new Container(new BoxLayout(BoxLayout.Y_AXIS));
        xname.setName("Name");
        xname.getStyle().setBgTransparency(0);
        xname.getStyle().setFont(Font.createSystemFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_MEDIUM));
        description.setFocusable(true);
        description.setName("Description");
        cnt.addComponent(xname);
        cnt.addComponent(description);
        c.addComponent(BorderLayout.CENTER, cnt);
        //thumbail or icon goes here. we add to the left in our borderlayout
        Button thumb = new Button(Image.createImage("/res/home-work.png"));
        c.addComponent(BorderLayout.WEST, thumb);

        return c;

}
...