/* * Copyright � 2008, 2010, Oracle and/or its affiliates. All rights reserved */ package com.sun.lwuit.uidemo; import com.sun.lwuit.CheckBox; import com.sun.lwuit.Command; import com.sun.lwuit.Component; import com.sun.lwuit.Container; import com.sun.lwuit.Display; import com.sun.lwuit.Form; import com.sun.lwuit.Image; import com.sun.lwuit.Label; import com.sun.lwuit.List; import com.sun.lwuit.events.ActionEvent; import com.sun.lwuit.events.ActionListener; import com.sun.lwuit.list.ListCellRenderer; import com.sun.lwuit.layouts.BoxLayout; import com.sun.lwuit.list.DefaultListCellRenderer; import com.sun.lwuit.plaf.UIManager; import com.sun.lwuit.util.Resources; import java.io.IOException; /** * A demo showing off the power of renderers both for combo boxes and lists * * @author Shai Almog */ public class RenderingDemo extends Demo implements ActionListener { private String[] RENDERED_CONTENT = { "ImageRenderer", "WidgetRenderer", "ColorRenderer", "DefaultListCellRenderer", "FishEyeRenderer" }; private List list; private ListCellRenderer[] renderers; public String getName() { return "Rendering"; } public void cleanup() { list = null; renderers = null; } protected void executeDemo(final Container f) { f.setLayout(new BoxLayout(BoxLayout.Y_AXIS)); f.setScrollable(false); list = new List(RENDERED_CONTENT); renderers = new ListCellRenderer[RENDERED_CONTENT.length]; renderers[0] = new AlternateImageRenderer(); renderers[1] = new WidgetRenderer(); renderers[2] = new AlternateColorRenderer(); renderers[3] = new DefaultListCellRenderer(); renderers[4] = new FishEyeRenderer(); list.setRenderer(renderers[0]); list.addActionListener(this); f.addComponent(list); if(!Display.getInstance().isTouchScreenDevice()) { Label l = new Label("Try Applying Renderer To Menu"); l.setUIID("TitleLabel"); f.addComponent(l); addCommand(new Command("Set To Menu") { public void actionPerformed(ActionEvent ev) { Display.getInstance().getCurrent().setMenuCellRenderer(list.getRenderer()); } }, f); } } /** * Demonstrates we can derive from any component and implement a renderer any way * we please... Normally it would be best to derive from DefaultListCellRenderer. */ private static class AlternateColorRenderer extends Label implements ListCellRenderer { private int[] colors = new int[]{0xFF0000, 0xFF00, 0xFF}; //Red , Green , Blue private static int currentIndex; public AlternateColorRenderer() { super(""); } public Component getListCellRendererComponent(List list, Object value, int index, boolean isSelected) { setText(value.toString()); currentIndex = index % 3; setFocus(isSelected); getStyle().setBgTransparency(100); getStyle().setFgColor(colors[currentIndex]); return this; } public Component getListFocusComponent(List list) { setText(""); setFocus(true); getStyle().setBgTransparency(100); return this; } } /** * Returns the text that should appear in the help command */ protected String getHelp() { return UIManager.getInstance().localize("renderingHelp", "Help description"); } public void actionPerformed(ActionEvent evt) { int newSelected = ((List) evt.getSource()).getSelectedIndex(); list.setListCellRenderer(renderers[newSelected]); list.requestFocus(); list.getParent().revalidate(); } /** * Demonstrates implementation of a renderer derived from a label * and the use of icons in the renderer */ private static class AlternateImageRenderer extends Label implements ListCellRenderer { private Image[] images; /** Creates a new instance of AlternateImageRenderer */ public AlternateImageRenderer() { super(""); images = new Image[2]; try { Resources imageRes = UIDemoMain.getResource("images"); images[0] = imageRes.getImage("sady.png"); images[1] = imageRes.getImage("smily.png"); } catch (IOException ex) { ex.printStackTrace(); } setUIID("ListRenderer"); } public Component getListCellRendererComponent(List list, Object value, int index, boolean isSelected) { setText(value.toString()); setFocus(isSelected); if (isSelected) { setIcon(images[1]); getStyle().setBgTransparency(100); } else { setIcon(images[0]); getStyle().setBgTransparency(0); } return this; } public Component getListFocusComponent(List list) { setIcon(images[1]); setText(""); setFocus(true); getStyle().setBgTransparency(100); return this; } } /** * Demonstrates implementation of a renderer derived from a CheckBox */ private static class WidgetRenderer extends CheckBox implements ListCellRenderer { /** Creates a new instance of WidgetsRenderer */ public WidgetRenderer() { super(""); setUIID("ListRenderer"); } public Component getListCellRendererComponent(List list, Object value, int index, boolean isSelected) { setText("" + value); setFocus(isSelected); setSelected(isSelected); if (isSelected) { getStyle().setBgTransparency(100); } else { getStyle().setBgTransparency(0); } return this; } public Component getListFocusComponent(List list) { setText(""); setFocus(true); getStyle().setBgTransparency(100); setSelected(true); return this; } } /** * Demonstrates implementation of a renderer derived from a label * and the use of icons in the renderer */ private static class FishEyeRenderer extends Label implements ListCellRenderer { private Label title; private Container selected = new Container(new BoxLayout(BoxLayout.Y_AXIS)); public FishEyeRenderer() { super(""); Image smily = null; try { Resources imageRes = UIDemoMain.getResource("images"); smily = imageRes.getImage("smily.png"); } catch (IOException ex) { ex.printStackTrace(); } title = new Label(""); title.getSelectedStyle().setBgTransparency(0); Label description = new Label(smily); description.setText("description..."); description.getSelectedStyle().setBgTransparency(0); selected.addComponent(title); selected.addComponent(description); title.setFocus(true); description.setFocus(true); setUIID("ListRenderer"); //selected.getStyle().setBgTransparency(0xFF); } public Component getListCellRendererComponent(List list, Object value, int index, boolean isSelected) { if (isSelected) { title.setText(value.toString()); return selected; } setText(value.toString()); setFocus(false); getStyle().setBgTransparency(0); return this; } public Component getListFocusComponent(List list) { setText(""); setFocus(true); getStyle().setBgTransparency(100); return this; } } }