2011-07-27 228 views
2

我想爲圖像列表中的每個項目添加一個圖標。這是我創建列表的代碼:將圖標添加到列表中的每個列表項目

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

使用此列表渲染

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; 
    } 
} 

您可以從該渲染器中刪除不需要embelishments:焦點顏色變化等,......我也給代碼的選擇,而選擇的列表項的兩個不同的圖標。 然後設置列表這樣的渲染:

lst.setListCellRenderer(new MyListRenderer()); 
+0

親愛的彼得 你會告訴我如何爲列表中的每個項目設置不同的圖像? 坦克提前 – aida

+1

這將需要你建立一個新的/自定義列表; lwuit或j2me列表中的正常列表不會爲您提供此功能。我創建了一個擴展列表,爲每個列表項設置圖標 - 你需要一個渲染器來渲染它。我不能在這個線程中發佈代碼,因爲空間,我試過了,它不適合。或者,您可以在lwuit演示中查看魚眼渲染器。 – Peter

+0

tanx彼得,我明白你的幫助..祝你好運 – aida

2

您需要將圖像數據放置在模型中,或爲渲染器提供某種方式來提取和應用數據。在LWUIT演示中查看示例,您可以在其中同時呈現渲染器演示或滾動演示,其中顯示包含圖標和各種條目佈局的列表。

0

我已經使用了新的「通用列單元格渲染」列表中產生縮略圖(圖標)。我發現實現比列表呈現的其他選項更容易。以下鏈接提供了示例代碼來展示如何使用此技術創建列表。 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; 

}