ListCellRenderer.java
上传用户:haobig99
上传日期:2022-06-15
资源大小:369k
文件大小:6k
源码类别:

J2ME

开发平台:

Java

  1. /*
  2.  * Copyright 2008 Sun Microsystems, Inc.  All Rights Reserved.
  3.  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  4.  *
  5.  * This code is free software; you can redistribute it and/or modify it
  6.  * under the terms of the GNU General Public License version 2 only, as
  7.  * published by the Free Software Foundation.  Sun designates this
  8.  * particular file as subject to the "Classpath" exception as provided
  9.  * by Sun in the LICENSE file that accompanied this code.
  10.  *
  11.  * This code is distributed in the hope that it will be useful, but WITHOUT
  12.  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13.  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14.  * version 2 for more details (a copy is included in the LICENSE file that
  15.  * accompanied this code).
  16.  *
  17.  * You should have received a copy of the GNU General Public License version
  18.  * 2 along with this work; if not, write to the Free Software Foundation,
  19.  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20.  *
  21.  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  22.  * CA 95054 USA or visit www.sun.com if you need additional information or
  23.  * have any questions.
  24.  */
  25. package com.sun.lwuit.list;
  26. import com.sun.lwuit.Component;
  27. import com.sun.lwuit.List;
  28. /**
  29.  * A "rubber stamp" tool that allows us to extract a component (often the same
  30.  * component instance for all invocations) that is initialized to the value 
  31.  * of the current item extracted from the model, this component is drawn on the
  32.  * list and discarded. No state of the component is kept and the component is
  33.  * essentially discarded.
  34.  * <p>An instance of a renderer can be developed as such:
  35.  * <pre>
  36. <strong>public</strong> <strong>class</strong> <font color="#2040a0">MyYesNoRenderer</font> <strong>extends</strong> <font color="#2040a0">Label</font> <strong>implements</strong> <font color="#2040a0">ListCellRenderer</font> <font color="4444FF"><strong>{</strong></font>
  37.     <strong>public</strong> <font color="#2040a0">Component</font> <font color="#2040a0">getListCellRendererComponent</font><font color="4444FF"><strong>(</strong></font><font color="#2040a0">List</font> <font color="#2040a0">list</font>, <font color="#2040a0">Object</font> <font color="#2040a0">value</font>, <strong>int</strong> <font color="#2040a0">index</font>, <strong>boolean</strong> <font color="#2040a0">isSelected</font><font color="4444FF"><strong>)</strong></font> <font color="4444FF"><strong>{</strong></font>
  38.         <strong>if</strong><font color="4444FF"><strong>(</strong></font> <font color="4444FF"><strong>(</strong></font><font color="4444FF"><strong>(</strong></font><font color="#2040a0">Boolean</font><font color="4444FF"><strong>)</strong></font><font color="#2040a0">value</font><font color="4444FF"><strong>)</strong></font>.<font color="#2040a0">booleanValue</font><font color="4444FF"><strong>(</strong></font><font color="4444FF"><strong>)</strong></font> <font color="4444FF"><strong>)</strong></font> <font color="4444FF"><strong>{</strong></font>
  39.             <font color="#2040a0">setText</font><font color="4444FF"><strong>(</strong></font><font color="#008000">&quot;Yes&quot;</font><font color="4444FF"><strong>)</strong></font><font color="4444FF">;</font>
  40.         <font color="4444FF"><strong>}</strong></font> <strong>else</strong> <font color="4444FF"><strong>{</strong></font>
  41.             <font color="#2040a0">setText</font><font color="4444FF"><strong>(</strong></font><font color="#008000">&quot;No&quot;</font><font color="4444FF"><strong>)</strong></font><font color="4444FF">;</font>
  42.         <font color="4444FF"><strong>}</strong></font>
  43.         <strong>return</strong> <strong>this</strong><font color="4444FF">;</font>
  44.     <font color="4444FF"><strong>}</strong></font>
  45.     <strong>public</strong> <font color="#2040a0">Component</font> <font color="#2040a0">getListFocusComponent</font><font color="4444FF"><strong>(</strong></font><font color="#2040a0">List</font> <font color="#2040a0">list</font><strong>)</strong></font> <font color="4444FF"><strong>{</strong></font>
  46.         <font color="#2040a0">Label label = new label</font><strong>(&quot;&quot;);</strong>
  47.         <font color="#2040a0">label.getStyle().setBgTransparency(</font><font color="#008000">100</font>);
  48.      </strong>
  49.         <strong>return</strong> <font color="#2040a0">label</font><font color="4444FF">;</font>
  50.     <font color="4444FF"><strong>}</strong></font>
  51. <font color="4444FF"><strong>}</strong></font>
  52.  * </pre>
  53.  * 
  54.  * <p>It is recommended that the component whose values are manipulated would not 
  55.  * support features such as repaint(). This is accomplished by overriding repaint
  56.  * in the subclass with an empty implementation. This is advised for performance
  57.  * reasons, otherwise every change made to the component might trigger a repaint that 
  58.  * wouldn't do anything but still cost in terms of processing.
  59.  * 
  60.  * @author Chen Fishbein
  61.  */
  62. public interface ListCellRenderer { 
  63.     /**
  64.      * Returns a component instance that is already set to render "value". While it is not a requirement
  65.      * many renderes often derive from a component (such as a label) and return "this".
  66.      * Notice that a null value for the value argument might be sent when refreshing the theme of the
  67.      * list.
  68.      * 
  69.      * @param list the list component
  70.      * @param value the value to render
  71.      * @param index the index in the list
  72.      * @param isSelected whether the entry is selected
  73.      * @return a component to paint within the list
  74.      */
  75.     public Component getListCellRendererComponent(List list, Object value, int index, boolean isSelected);
  76.     
  77.     /**
  78.      * Returns a component instance that is painted under the currently focused renderer
  79.      * and is animated to provide smooth scrolling. 
  80.      * When the selection moves, this component is drawn above/bellow the list items - 
  81.      * it is recommended to give this component some level of transparency (see above code example). 
  82.      * This method is optional an implementation 
  83.      * can choose to return null.
  84.      * 
  85.      * @param list the parent list 
  86.      * @return a component to use as focus
  87.      * @see List#setSmoothScrolling
  88.      */
  89.     public Component getListFocusComponent(List list);
  90.     
  91. }