JavaTM 2 Platform
Standard Ed. 5.0

javax.swing.plaf.basic
类 BasicListUI

java.lang.Object
  继承者 javax.swing.plaf.ComponentUI
      继承者 javax.swing.plaf.ListUI
          继承者 javax.swing.plaf.basic.BasicListUI

public class BasicListUI
extends ListUI

ListUI 的基本 L&F 实现。


嵌套类摘要
 class BasicListUI.FocusHandler
          此内部类因编译器故障而被标记为“公开”。
 class BasicListUI.ListDataHandler
          在 installUI 时和只要 JList.model 属性更改时就要添加到 JList 模型的 ListDataListener。
 class BasicListUI.ListSelectionHandler
          在 installUI 时和只要 JList.selectionModel 属性更改时就要添加到 JList 模型的 ListSelectionListener。
 class BasicListUI.MouseInputHandler
          鼠标输入和 JList 的焦点处理。
 class BasicListUI.PropertyChangeHandler
          在 installUI 时添加到 JList 的 PropertyChangeListener。
 
字段摘要
protected  int cellHeight
           
protected  int[] cellHeights
           
protected static int cellRendererChanged
           
protected  int cellWidth
           
protected static int fixedCellHeightChanged
           
protected static int fixedCellWidthChanged
           
protected  FocusListener focusListener
           
protected static int fontChanged
           
protected  JList list
           
protected  ListDataListener listDataListener
           
protected  ListSelectionListener listSelectionListener
           
protected static int modelChanged
           
protected  MouseInputListener mouseInputListener
           
protected  PropertyChangeListener propertyChangeListener
           
protected static int prototypeCellValueChanged
           
protected  CellRendererPane rendererPane
           
protected static int selectionModelChanged
           
protected  int updateLayoutStateNeeded
           
 
构造方法摘要
BasicListUI()
           
 
方法摘要
protected  int convertRowToY(int row)
          返回指定行的原点的 JList 相对 Y 坐标,如果 row 无效,则返回 -1。
protected  int convertYToRow(int y0)
          基于当前布局,将 JList 相对坐标转换为包含它的行。
protected  FocusListener createFocusListener()
           
protected  ListDataListener createListDataListener()
          创建在需要时由模型添加到 JList 的 ListDataListener 的实例。
protected  ListSelectionListener createListSelectionListener()
          创建在需要时由 selectionModel 添加到 JList 的 ListSelectionHandler 的实例。
protected  MouseInputListener createMouseInputListener()
          创建实现 MouseInputListener 的委托。
protected  PropertyChangeListener createPropertyChangeListener()
          创建由 installUI() 添加到 JList 的 PropertyChangeHandler 的实例。
static ComponentUI createUI(JComponent list)
          返回 BasicListUI 的新实例。
 Rectangle getCellBounds(JList list, int index1, int index2)
          返回在 JList 坐标中指定项的边界,如果索引无效,则返回 null。
 Dimension getPreferredSize(JComponent c)
          列表的 preferredSize 依赖于布局方向。
protected  int getRowHeight(int row)
          返回基于当前布局的指定行的高度。
 Point indexToLocation(JList list, int index)
          返回在 JList 坐标中指定项的原点,如果索引无效,则返回 null。
protected  void installDefaults()
          初始化 JList 属性(如字体、前景和背景)并添加 CellRendererPane。
protected  void installKeyboardActions()
          在与 BasicListUI 关联的 JList 上注册键盘绑定。
protected  void installListeners()
          为 JList、其模型及其 selectionModel 创建并安装侦听器。
 void installUI(JComponent c)
          按顺序调用 installDefaults()installListeners()installKeyboardActions() 来初始化 this.list
 int locationToIndex(JList list, Point location)
          将 JList 坐标中的点转换为该处单元格最接近的索引。
protected  void maybeUpdateLayoutState()
          如果 updateLayoutStateNeeded 为非零,则调用 updateLayoutState() 并重置 updateLayoutStateNeeded。
 void paint(Graphics g, JComponent c)
          绘制与 Graphics 对象 clipRect 相交的行。
protected  void paintCell(Graphics g, int row, Rectangle rowBounds, ListCellRenderer cellRenderer, ListModel dataModel, ListSelectionModel selModel, int leadIndex)
          绘制一个 List 单元格:计算相关状态,获取“橡皮图章”单元格渲染器组件,然后使用 CellRendererPane 来绘制它。
protected  void selectNextIndex()
          选择下一行并强行使其可见。
protected  void selectPreviousIndex()
          选择前一行并强行使其可见。
protected  void uninstallDefaults()
          将尚未显式重写的 JList 属性设置为 null。
protected  void uninstallKeyboardActions()
          注销根据 installKeyboardActions 安装的键盘动作。
protected  void uninstallListeners()
          移除 JList、其模型及其 selectionModel 的侦听器。
 void uninstallUI(JComponent c)
          按顺序调用 uninstallListeners()uninstallKeyboardActions()uninstallDefaults() 来取消初始化 this.list
protected  void updateLayoutState()
          基于当前字体和 fixedCellWidth、fixedCellHeight 和 prototypeCellValue 的当前值重新计算 cellHeight(一个或多个)和 cellWidth 的值。
 
从类 javax.swing.plaf.ComponentUI 继承的方法
contains, getAccessibleChild, getAccessibleChildrenCount, getMaximumSize, getMinimumSize, update
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

字段详细信息

list

protected JList list

rendererPane

protected CellRendererPane rendererPane

focusListener

protected FocusListener focusListener

mouseInputListener

protected MouseInputListener mouseInputListener

listSelectionListener

protected ListSelectionListener listSelectionListener

listDataListener

protected ListDataListener listDataListener

propertyChangeListener

protected PropertyChangeListener propertyChangeListener

cellHeights

protected int[] cellHeights

cellHeight

protected int cellHeight

cellWidth

protected int cellWidth

updateLayoutStateNeeded

protected int updateLayoutStateNeeded

modelChanged

protected static final int modelChanged
另请参见:
常量字段值

selectionModelChanged

protected static final int selectionModelChanged
另请参见:
常量字段值

fontChanged

protected static final int fontChanged
另请参见:
常量字段值

fixedCellWidthChanged

protected static final int fixedCellWidthChanged
另请参见:
常量字段值

fixedCellHeightChanged

protected static final int fixedCellHeightChanged
另请参见:
常量字段值

prototypeCellValueChanged

protected static final int prototypeCellValueChanged
另请参见:
常量字段值

cellRendererChanged

protected static final int cellRendererChanged
另请参见:
常量字段值
构造方法详细信息

BasicListUI

public BasicListUI()
方法详细信息

paintCell

protected void paintCell(Graphics g,
                         int row,
                         Rectangle rowBounds,
                         ListCellRenderer cellRenderer,
                         ListModel dataModel,
                         ListSelectionModel selModel,
                         int leadIndex)
绘制一个 List 单元格:计算相关状态,获取“橡皮图章”单元格渲染器组件,然后使用 CellRendererPane 来绘制它。子类可以要重写此方法(而非 paint())。

另请参见:
paint(java.awt.Graphics, javax.swing.JComponent)

paint

public void paint(Graphics g,
                  JComponent c)
绘制与 Graphics 对象 clipRect 相交的行。此方法在必要时调用 paintCell。子类可能要重写这些方法。

覆盖:
ComponentUI 中的 paint
参数:
g - 将在其中进行绘制的 Graphics 上下文
c - 将绘制的组件;此参数常被忽略,但如果 UI 对象是无状态的并由多个组件共享,则可以使用该参数
另请参见:
paintCell(java.awt.Graphics, int, java.awt.Rectangle, javax.swing.ListCellRenderer, javax.swing.ListModel, javax.swing.ListSelectionModel, int)

getPreferredSize

public Dimension getPreferredSize(JComponent c)
列表的 preferredSize 依赖于布局方向。
布局方向首选大小
JList.VERTICAL 列表的 preferredSize 是行的总高度和单元格的最大宽度。如果指定了 JList.fixedCellHeight,则行的总高度为 (cellVerticalMargins + fixedCellHeight) * model.getSize(),其中,rowVerticalMargins 是为绘制黄色焦点轮廓所分配的空间。同样,如果指定了 fixedCellWidth,则使用它即可。
JList.VERTICAL_WRAP 如果可见行计数大于零,则 preferredHeight 为最大单元格高度 * visibleRowCount。如果可见行计数 <= 0,则首选高度为列表的当前高度或最大单元格调试,取其中的较大者。首选宽度则为最大单元格宽度 * 所需的列数。其中所需的列数为 list.height / 最大单元格高度。最大单元格高度或者是固定单元高度,或者通过对所有单元格进行迭代以从 ListCellRenderer 中查找最大高度来确定。
JList.HORIZONTAL_WRAP 如果可见行计数大于零,则 preferredHeight 即为最大单元格高度 * adjustedRowCount。其中 visibleRowCount 用于确定列数。因为此操作进行水平布置,所以行数将根据列数来确定。例如,假设一个模型有 10 个项和 8 个可见行计数。显示此模型所需的列数是 2,但是不再需要 8 行来显示,只需 5 行,因此 adjustedRowCount 为 5。

如果可见行计数 <= 0,则首选高度由列数规定,列数的多少以适合 JList 的宽度为准(宽度 / 最大单元格宽度),但至少为一列。首选高度则为模型大小 / 列数 * 最大单元格高度。最大单元格高度或者是固定单元高度,或者通过对所有单元格进行迭代以从 ListCellRenderer 中查找最大高度来确定。

上述内容指定原始首选宽度和高度。所产生的首选宽度为上述宽度 + insets.left + insets.right,所产生的首选高度为上述高度 + insets.top + insets.bottom。其中 Insets 根据 list.getInsets() 确定。

覆盖:
ComponentUI 中的 getPreferredSize
参数:
c - JList 组件。
返回:
列表的总大小。
另请参见:
JComponent.getPreferredSize(), LayoutManager.preferredLayoutSize(java.awt.Container)

selectPreviousIndex

protected void selectPreviousIndex()
选择前一行并强行使其可见。

另请参见:
JList.ensureIndexIsVisible(int)

selectNextIndex

protected void selectNextIndex()
选择下一行并强行使其可见。

另请参见:
JList.ensureIndexIsVisible(int)

installKeyboardActions

protected void installKeyboardActions()
在与 BasicListUI 关联的 JList 上注册键盘绑定。此方法在 installUI() 时调用。

另请参见:
installUI(javax.swing.JComponent)

uninstallKeyboardActions

protected void uninstallKeyboardActions()
注销根据 installKeyboardActions 安装的键盘动作。此方法在 uninstallUI() 时调用,该时刻子类应该确保已从此处移除在 installUI 时注册的所有键盘动作。

另请参见:
installUI(javax.swing.JComponent)

installListeners

protected void installListeners()
为 JList、其模型及其 selectionModel 创建并安装侦听器。此方法在 installUI() 时调用。

另请参见:
installUI(javax.swing.JComponent), uninstallListeners()

uninstallListeners

protected void uninstallListeners()
移除 JList、其模型及其 selectionModel 的侦听器。所有侦听器字段都将在此被重置为 null。在 uninstallUI() 时调用此方法,它应该与 installListeners 保持同步。

另请参见:
uninstallUI(javax.swing.JComponent), installListeners()

installDefaults

protected void installDefaults()
初始化 JList 属性(如字体、前景和背景)并添加 CellRendererPane。仅当字体、前景和背景属性的当前值为 null 或 UIResource 时才设置这些属性,其他属性在当前值为 null 时设置。

另请参见:
uninstallDefaults(), installUI(javax.swing.JComponent), CellRendererPane

uninstallDefaults

protected void uninstallDefaults()
将尚未显式重写的 JList 属性设置为 null。如果某个属性的当前值不是 UIResource,则视为被重写。

另请参见:
installDefaults(), uninstallUI(javax.swing.JComponent), CellRendererPane

installUI

public void installUI(JComponent c)
按顺序调用 installDefaults()installListeners()installKeyboardActions() 来初始化 this.list

覆盖:
ComponentUI 中的 installUI
参数:
c - 将安装此 UI 委托的组件
另请参见:
installDefaults(), installListeners(), installKeyboardActions()

uninstallUI

public void uninstallUI(JComponent c)
按顺序调用 uninstallListeners()uninstallKeyboardActions()uninstallDefaults() 来取消初始化 this.list。将 this.list 设置为 null。

覆盖:
ComponentUI 中的 uninstallUI
参数:
c - 从中移除此 UI 委托的组件;此参数常被忽略,但如果 UI 对象是无状态的并由多个组件共享,则可以使用该参数
另请参见:
uninstallListeners(), uninstallKeyboardActions(), uninstallDefaults()

createUI

public static ComponentUI createUI(JComponent list)
返回 BasicListUI 的新实例。为每个 JList 分配一个 BasicListUI 委托。

返回:
Windows 外观的新的 ListUI 实现。

locationToIndex

public int locationToIndex(JList list,
                           Point location)
JList 坐标中的点转换为该处单元格最接近的索引。要确定单元是否实际包含指定的位置,需要配合使用此方法与 getCellBounds。如果模型为空,则返回 -1。

指定者:
ListUI 中的 locationToIndex
location - 单元格的 JList 相对坐标
返回:
该处单元格的索引或 -1。
另请参见:
ListUI.locationToIndex(javax.swing.JList, java.awt.Point)

indexToLocation

public Point indexToLocation(JList list,
                             int index)
从类 ListUI 复制的描述
返回在 JList 坐标中指定项的原点,如果索引无效,则返回 null。

指定者:
ListUI 中的 indexToLocation
index - JList 单元格的索引。
返回:
第 index 个单元格的原点;如果 index 无效,则返回 null。
另请参见:
ListUI.indexToLocation(javax.swing.JList, int)

getCellBounds

public Rectangle getCellBounds(JList list,
                               int index1,
                               int index2)
从类 ListUI 复制的描述
返回在 JList 坐标中指定项的边界,如果索引无效,则返回 null。

指定者:
ListUI 中的 getCellBounds
返回:
第 index 个单元格的边界。
另请参见:
ListUI.getCellBounds(javax.swing.JList, int, int)

getRowHeight

protected int getRowHeight(int row)
返回基于当前布局的指定行的高度。

返回:
指定行高度,如果 row 无效,则返回 -1。
另请参见:
convertYToRow(int), convertRowToY(int), updateLayoutState()

convertYToRow

protected int convertYToRow(int y0)
基于当前布局,将 JList 相对坐标转换为包含它的行。如果 y0 没有落在任何行中,则返回 -1。

返回:
包含 y0 的行,或者返回 -1。
另请参见:
getRowHeight(int), updateLayoutState()

convertRowToY

protected int convertRowToY(int row)
返回指定行的原点的 JList 相对 Y 坐标,如果 row 无效,则返回 -1。

返回:
包含行原点的 Y 坐标,或者返回 -1。
另请参见:
getRowHeight(int), updateLayoutState()

maybeUpdateLayoutState

protected void maybeUpdateLayoutState()
如果 updateLayoutStateNeeded 为非零,则调用 updateLayoutState() 并重置 updateLayoutStateNeeded。各种方法在进行任何基于列表几何形状的计算之前应该调用此方法。例如,在 paint() 和 getPreferredSize() 中首先调用此方法。

另请参见:
updateLayoutState()

updateLayoutState

protected void updateLayoutState()
基于当前字体和 fixedCellWidth、fixedCellHeight 和 prototypeCellValue 的当前值重新计算 cellHeight(一个或多个)和 cellWidth 的值。

另请参见:
maybeUpdateLayoutState()

createMouseInputListener

protected MouseInputListener createMouseInputListener()
创建实现 MouseInputListener 的委托。委托在 installUI() 时被添加到相应的 java.awt.Component 侦听器列表中。子类可以重写此方法以返回自定义 MouseInputListener,例如
 class MyListUI extends BasicListUI {
    protected MouseInputListener createMouseInputListener() {
        return new MyMouseInputHandler();
    }
    public class MyMouseInputHandler extends MouseInputHandler {
        public void mouseMoved(MouseEvent e) {
            // do some extra work when the mouse moves
            super.mouseMoved(e);
        }
    }
 }
 

另请参见:
BasicListUI.MouseInputHandler, installUI(javax.swing.JComponent)

createFocusListener

protected FocusListener createFocusListener()

createListSelectionListener

protected ListSelectionListener createListSelectionListener()
创建在需要时由 selectionModel 添加到 JList 的 ListSelectionHandler 的实例。子类可以重写此方法以返回自定义 ListSelectionListener,例如
 class MyListUI extends BasicListUI {
    protected ListSelectionListener createListSelectionListener() {
        return new MySelectionListener();
    }
    public class MySelectionListener extends ListSelectionHandler {
        public void valueChanged(ListSelectionEvent e) {
            // do some extra work when the selection changes
            super.valueChange(e);
        }
    }
 }
 

另请参见:
BasicListUI.ListSelectionHandler, installUI(javax.swing.JComponent)

createListDataListener

protected ListDataListener createListDataListener()
创建在需要时由模型添加到 JList 的 ListDataListener 的实例。子类可以重写此方法以返回自定义 ListDataListener,例如
 class MyListUI extends BasicListUI {
    protected ListDataListener createListDataListener() {
        return new MyListDataListener();
    }
    public class MyListDataListener extends ListDataHandler {
        public void contentsChanged(ListDataEvent e) {
            // do some extra work when the models contents change
            super.contentsChange(e);
        }
    }
 }
 

另请参见:
ListDataListener, JList.getModel(), installUI(javax.swing.JComponent)

createPropertyChangeListener

protected PropertyChangeListener createPropertyChangeListener()
创建由 installUI() 添加到 JList 的 PropertyChangeHandler 的实例。子类可以重写此方法以返回自定义 PropertyChangeListener,例如
 class MyListUI extends BasicListUI {
    protected PropertyChangeListener createPropertyChangeListener() {
        return new MyPropertyChangeListener();
    }
    public class MyPropertyChangeListener extends PropertyChangeHandler {
        public void propertyChange(PropertyChangeEvent e) {
            if (e.getPropertyName().equals("model")) {
                // do some extra work when the model changes
            }
            super.propertyChange(e);
        }
    }
 }
 

另请参见:
PropertyChangeListener, installUI(javax.swing.JComponent)

JavaTM 2 Platform
Standard Ed. 5.0

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java 2 SDK SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策