java.lang.Object javax.swing.plaf.ComponentUI javax.swing.plaf.ListUI javax.swing.plaf.basic.BasicListUI
public class BasicListUI
ListUI
的可扩展实现。
多个列表之间不能共享 BasicListUI
实例。
嵌套类摘要 | |
---|---|
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 的新实例。 |
int |
getBaseline(JComponent c, int width, int height) 返回基线。 |
Component.BaselineResizeBehavior |
getBaselineResizeBehavior(JComponent c) 返回一个枚举,它指示该组件的基线如何随大小的改变而发生更改。 |
Rectangle |
getCellBounds(JList list, int index1, int index2) 返回给定列表坐标系统中的有界矩形,单元的范围由两个索引指定。 |
Dimension |
getPreferredSize(JComponent c) 列表的 preferredSize 依赖于布局方向。 |
protected int |
getRowHeight(int row) 返回基于当前布局的指定行的高度。 |
Point |
indexToLocation(JList list, int index) 返回列表坐标系统中给定 JList 中指定项的原点。 |
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 为非 0,则调用 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 |
字段详细信息 |
---|
protected JList list
protected CellRendererPane rendererPane
protected FocusListener focusListener
protected MouseInputListener mouseInputListener
protected ListSelectionListener listSelectionListener
protected ListDataListener listDataListener
protected PropertyChangeListener propertyChangeListener
protected int[] cellHeights
protected int cellHeight
protected int cellWidth
protected int updateLayoutStateNeeded
protected static final int modelChanged
protected static final int selectionModelChanged
protected static final int fontChanged
protected static final int fixedCellWidthChanged
protected static final int fixedCellHeightChanged
protected static final int prototypeCellValueChanged
protected static final int cellRendererChanged
构造方法详细信息 |
---|
public BasicListUI()
方法详细信息 |
---|
protected void paintCell(Graphics g, int row, Rectangle rowBounds, ListCellRenderer cellRenderer, ListModel dataModel, ListSelectionModel selModel, int leadIndex)
public void paint(Graphics g, JComponent c)
ComponentUI
中的
paint
g
- 将在其中进行绘制的
Graphics
上下文
c
- 将绘制的组件;此参数常被忽略,但如果 UI 对象是无状态的并由多个组件共享,则可以使用该参数
paintCell(java.awt.Graphics, int, java.awt.Rectangle, javax.swing.ListCellRenderer, javax.swing.ListModel, javax.swing.ListSelectionModel, int)
public int getBaseline(JComponent c, int width, int height)
ComponentUI
中的
getBaseline
c
- 为其请求基线的
JComponent
width
- 为其获取基线的宽度
height
- 为其获取基线的高度
NullPointerException
- 如果
c
为
null
IllegalArgumentException
- 如果宽度或高度 < 0
JComponent.getBaseline(int, int)
public Component.BaselineResizeBehavior getBaselineResizeBehavior(JComponent c)
ComponentUI
中的
getBaselineResizeBehavior
c
- 为其返回调整大小行为的
JComponent
NullPointerException
- 如果
c
为
null
JComponent.getBaseline(int, int)
public Dimension getPreferredSize(JComponent c)
布局方向 | 首选大小 |
---|---|
JList.VERTICAL | 列表的 preferredSize 是行的总高度和单元格的最大宽度。如果指定了 JList.fixedCellHeight,则行的总高度为 (cellVerticalMargins + fixedCellHeight) * model.getSize(),其中,rowVerticalMargins 是为绘制黄色焦点轮廓所分配的空间。同样,如果指定了 fixedCellWidth,则使用它即可。 |
JList.VERTICAL_WRAP | 如果可见行计数大于 0,则 preferredHeight 为最大单元格高度 * visibleRowCount。如果可见行计数 <= 0,则首选高度为列表的当前高度或最大单元格调试,取其中的较大者。首选宽度则为最大单元格宽度 * 所需的列数。其中所需的列数为 list.height / 最大单元格高度。最大单元格高度或者是固定单元高度,或者通过对所有单元格进行迭代以从 ListCellRenderer 中查找最大高度来确定。 |
JList.HORIZONTAL_WRAP | 如果可见行计数大于 0,则 preferredHeight 即为最大单元格高度 * adjustedRowCount。其中 visibleRowCount 用于确定列数。因为此操作进行水平布置,所以行数将根据列数来确定。例如,假设一个模型有 10 个项和 8 个可见行计数。显示此模型所需的列数是 2,但是不再需要 8 行来显示,只需 5 行,因此 adjustedRowCount 为 5。 如果可见行计数 <= 0,则首选高度由列数规定,列数的多少以适合 |
Insets
根据
list.getInsets()
确定。
ComponentUI
中的
getPreferredSize
c
- JList 组件。
JComponent.getPreferredSize()
,
LayoutManager.preferredLayoutSize(java.awt.Container)
protected void selectPreviousIndex()
protected void selectNextIndex()
protected void installKeyboardActions()
BasicListUI
关联的
JList
上注册键盘绑定。此方法在 installUI() 时调用。
protected void uninstallKeyboardActions()
installKeyboardActions
安装的键盘动作。此方法在 uninstallUI() 时调用,该时刻子类应该确保已从此处移除在 installUI 时注册的所有键盘动作。
protected void installListeners()
protected void uninstallListeners()
protected void installDefaults()
protected void uninstallDefaults()
public void installUI(JComponent c)
installDefaults()
、
installListeners()
和
installKeyboardActions()
来初始化
this.list
。
ComponentUI
中的
installUI
c
- 将安装此 UI 委托的组件
installDefaults()
,
installListeners()
,
installKeyboardActions()
public void uninstallUI(JComponent c)
uninstallListeners()
、
uninstallKeyboardActions()
和
uninstallDefaults()
来取消初始化
this.list
。将 this.list 设置为 null。
ComponentUI
中的
uninstallUI
c
- 从中移除此 UI 委托的组件;此参数常被忽略,但如果 UI 对象是无状态的并由多个组件共享,则可以使用该参数
uninstallListeners()
,
uninstallKeyboardActions()
,
uninstallDefaults()
public static ComponentUI createUI(JComponent list)
public int locationToIndex(JList list, Point location)
JList
中与列表坐标系统中给定位置最接近的单元索引。要确定该单元是否真正包含指定位置,可比较该点与单元的边界,单元的边界通过
getCellBounds
提供。如果列表的模式为空,则此方法返回
-1
。
ListUI
中的
locationToIndex
list
- 列表
location
- 点的坐标
-1
NullPointerException
- 如果
location
为 null
public Point indexToLocation(JList list, int index)
JList
中指定项的原点。如果索引无效,则返回
null
。
ListUI
中的
indexToLocation
list
- 列表
index
- 单元索引
null
public Rectangle getCellBounds(JList list, int index1, int index2)
如果较小索引超出单元的列表范围,则此方法返回 null
。如果较小索引有效,但较大索引超出列表范围,则只返回第一个索引的边界。否则,返回有效范围的边界。
ListUI
中的
getCellBounds
list
- 列表
index1
- 范围内第一个索引
index2
- 范围内第二个索引
null
protected int getRowHeight(int row)
convertYToRow(int)
,
convertRowToY(int)
,
updateLayoutState()
protected int convertYToRow(int y0)
getRowHeight(int)
,
updateLayoutState()
protected int convertRowToY(int row)
getRowHeight(int)<