public class BasicComboBoxUI extends ComboBoxUI
组合框是复合组件,它意味着它是许多简单组件的集合。 此类创建并管理组合框和组合框模型上的侦听器。 这些侦听器根据组合框的属性和状态的变化更新用户界面。
所有事件处理由使用createxxxListener()
方法和内部类创建的监听器类来处理。 您可以通过覆盖createxxxListener()
方法并提供自己的事件侦听器或从此类中提供的子类化来更改此类的行为。
要添加具体操作,请覆盖installKeyboardActions
以添加响应KeyStroke绑定的操作。 参见文章How to Use Key Bindings
Modifier and Type | Class and Description |
---|---|
class |
BasicComboBoxUI.ComboBoxLayoutManager
该布局管理器处理组合框的“标准”布局。
|
class |
BasicComboBoxUI.FocusHandler
当焦点丢失时,此侦听器隐藏弹出窗口。
|
class |
BasicComboBoxUI.ItemHandler
此监听器监视组合框中对选择的更改。
|
class |
BasicComboBoxUI.KeyHandler
该侦听器检查键事件是否不是导航键。
|
class |
BasicComboBoxUI.ListDataHandler
该监听器监视
ComboBoxModel 中的
ComboBoxModel 。
|
class |
BasicComboBoxUI.PropertyChangeHandler
该监听器监视组合框中已更改的绑定属性。
|
Modifier and Type | Field and Description |
---|---|
protected JButton |
arrowButton |
protected Dimension |
cachedMinimumSize |
protected JComboBox |
comboBox |
protected CellRendererPane |
currentValuePane |
protected Component |
editor |
protected FocusListener |
focusListener
此保护字段是实现特定的。
|
protected boolean |
hasFocus
此保护字段是实现特定的。
|
protected boolean |
isMinimumSizeDirty |
protected ItemListener |
itemListener
此保护字段是实现特定的。
|
protected KeyListener |
keyListener
此保护字段是实现特定的。
|
protected JList |
listBox |
protected ListDataListener |
listDataListener
此保护字段是实现特定的。
|
protected Insets |
padding
如果指定了这些插值,则在组合框中布置和绘制“选定”项时,这些插值将围绕单元格渲染器充当填充。
|
protected ComboPopup |
popup |
protected KeyListener |
popupKeyListener |
protected MouseListener |
popupMouseListener |
protected MouseMotionListener |
popupMouseMotionListener |
protected PropertyChangeListener |
propertyChangeListener
此保护字段是实现特定的。
|
protected boolean |
squareButton
指示组合框按钮是否应该是正方形。
|
Constructor and Description |
---|
BasicComboBoxUI() |
Modifier and Type | Method and Description |
---|---|
void |
addEditor()
这种公共方法是实现具体的,应该是私有的。
|
void |
configureArrowButton()
这种公共方法是实现具体的,应该是私有的。
|
protected void |
configureEditor()
此受保护方法是实现特定的,应该是私有的。
|
protected JButton |
createArrowButton()
创建一个按钮,该按钮将用作控件来显示或隐藏组合框的弹出窗口部分。
|
protected ComboBoxEditor |
createEditor()
创建将在可编辑组合框中使用的默认编辑器。
|
protected FocusListener |
createFocusListener()
创建一个
FocusListener ,它将被添加到组合框中。
|
protected ItemListener |
createItemListener()
创建一个
ItemListener ,它将被添加到组合框中。
|
protected KeyListener |
createKeyListener()
创建一个
KeyListener 将被添加到组合框。
|
protected LayoutManager |
createLayoutManager()
创建一个布局管理器来管理构成组合框的组件。
|
protected ListDataListener |
createListDataListener()
创建一个列表数据监听器,将被添加到
ComboBoxModel 。
|
protected ComboPopup |
createPopup()
创建组合框的弹出窗口部分。
|
protected PropertyChangeListener |
createPropertyChangeListener()
创建一个
PropertyChangeListener ,它将被添加到组合框中。
|
protected ListCellRenderer |
createRenderer()
创建将在不可编辑的组合框中使用的默认渲染器。
|
static ComponentUI |
createUI(JComponent c) |
Accessible |
getAccessibleChild(JComponent c, int i)
返回对象的
i 第
Accessible 孩子。
|
int |
getAccessibleChildrenCount(JComponent c)
返回对象中可访问的子对象的数量。
|
int |
getBaseline(JComponent c, int width, int height)
返回基线。
|
Component.BaselineResizeBehavior |
getBaselineResizeBehavior(JComponent c)
返回一个枚举,指示组件的基线如何随着大小的变化而改变。
|
protected Dimension |
getDefaultSize()
使用当前渲染器和字体返回组合框的空显示区域的默认大小。
|
protected Dimension |
getDisplaySize()
返回显示区域的计算大小。
|
protected Insets |
getInsets()
从JComboBox获取插图。
|
Dimension |
getMaximumSize(JComponent c)
返回指定组件的最大尺寸,适合外观和感觉。
|
Dimension |
getMinimumSize(JComponent c)
最小尺寸是显示区域的大小加上插页加上按钮。
|
Dimension |
getPreferredSize(JComponent c)
返回指定组件的偏好大小,适合外观和感觉。
|
protected Dimension |
getSizeForComponent(Component comp)
如果用作单元格渲染器,则返回组件将具有的大小。
|
protected void |
installComponents()
创建和初始化构成聚合组合框的组件。
|
protected void |
installDefaults()
将默认颜色,默认字体,默认渲染器和默认编辑器安装到JComboBox中。
|
protected void |
installKeyboardActions()
将键盘操作添加到JComboBox。
|
protected void |
installListeners()
为组合框及其模型创建并安装侦听器。
|
void |
installUI(JComponent c)
适当地配置指定的组件的外观和感觉。
|
boolean |
isFocusTraversable(JComboBox c)
确定JComboBox是否可以聚焦。
|
protected boolean |
isNavigationKey(int keyCode)
返回是否提供的keyCode映射到用于导航的密钥。
|
boolean |
isPopupVisible(JComboBox c)
告诉弹出窗口是否可见。
|
void |
paint(Graphics g, JComponent c)
适当地涂抹指定的组件的外观和感觉。
|
void |
paintCurrentValue(Graphics g, Rectangle bounds, boolean hasFocus)
绘制当前选定的项目。
|
void |
paintCurrentValueBackground(Graphics g, Rectangle bounds, boolean hasFocus)
绘制当前所选项目的背景。
|
protected Rectangle |
rectangleForCurrentValue()
返回保留用于绘制当前选定项目的区域。
|
void |
removeEditor()
这种公共方法是实现具体的,应该是私有的。
|
protected void |
selectNextPossibleValue()
选择列表中的下一个项目。
|
protected void |
selectPreviousPossibleValue()
选择列表中的上一个项目。
|
void |
setPopupVisible(JComboBox c, boolean v)
隐藏弹出窗口。
|
protected void |
toggleOpenClose()
隐藏弹出窗口,如果它正在显示,并显示弹出窗口,如果它是隐藏的。
|
void |
unconfigureArrowButton()
这种公共方法是实现具体的,应该是私有的。
|
protected void |
unconfigureEditor()
此受保护方法是实现特定的,应该是私有的。
|
protected void |
uninstallComponents()
构成组合框的集合组件未注册并未初始化。
|
protected void |
uninstallDefaults()
从组合框中卸载默认颜色,默认字体,默认渲染器和默认编辑器。
|
protected void |
uninstallKeyboardActions()
删除焦点InputMap和ActionMap。
|
protected void |
uninstallListeners()
从组合框及其模型中删除已安装的监听器。
|
void |
uninstallUI(JComponent c)
在installUI中反转在
installUI 上完成的
installUI 。
|
contains, update
protected JComboBox comboBox
protected boolean hasFocus
protected JList listBox
protected CellRendererPane currentValuePane
protected ComboPopup popup
protected Component editor
protected JButton arrowButton
protected KeyListener keyListener
createKeyListener()
protected FocusListener focusListener
createFocusListener()
protected PropertyChangeListener propertyChangeListener
protected ItemListener itemListener
createItemListener()
protected MouseListener popupMouseListener
protected MouseMotionListener popupMouseMotionListener
protected KeyListener popupKeyListener
protected ListDataListener listDataListener
createListDataListener()
protected boolean isMinimumSizeDirty
protected Dimension cachedMinimumSize
protected boolean squareButton
protected Insets padding
public static ComponentUI createUI(JComponent c)
public void installUI(JComponent c)
ComponentUI
ComponentUI
实例作为指定组件上的UI委托时,将调用此方法。
该方法应该完全配置组件的外观,包括以下内容:
LayoutManager
上安装LayoutManager。 PropertyChangeListener
上创建/安装PropertyChangeListener,以便适当地检测和响应组件属性的更改。 installUI
在
ComponentUI
c
- 正在安装此UI代理的组件
ComponentUI.uninstallUI(javax.swing.JComponent)
,
JComponent.setUI(javax.swing.plaf.ComponentUI)
,
JComponent.updateUI()
public void uninstallUI(JComponent c)
ComponentUI
installUI
上完成的installUI
。
当将此UIComponent
实例作为指定组件的UI委托删除时,将调用此方法。
该方法应该撤销在installUI中执行的installUI
,小心使JComponent
实例处于干净状态(无外部侦听器,外观特定属性对象等)。
这应该包括以下内容:
uninstallUI
在
ComponentUI
类
c
- 删除此UI代理的组件;
这个参数经常被忽略,但如果UI对象是无状态的并且被多个组件共享,则可能会被使用
ComponentUI.installUI(javax.swing.JComponent)
,
JComponent.updateUI()
protected void installDefaults()
protected void installListeners()
protected void uninstallDefaults()
protected void uninstallListeners()
installListeners
中添加的installListeners
protected ComboPopup createPopup()
ComboPopup
ComboPopup
protected KeyListener createKeyListener()
KeyListener
将被添加到组合框。
如果此方法返回null,则不会将其添加到组合框中。
KeyListener
或null
protected FocusListener createFocusListener()
FocusListener
将被添加到组合框。
如果此方法返回null,则不会将其添加到组合框中。
FocusListener
的实例或null
protected ListDataListener createListDataListener()
ComboBoxModel
。
如果此方法返回null,则不会将其添加到组合框模型中。
ListDataListener
的实例或null
protected ItemListener createItemListener()
ItemListener
,它将被添加到组合框中。
如果此方法返回null,则不会将其添加到组合框中。
子类可以覆盖此方法以返回自己的ItemEvent处理程序的实例。
ItemListener
的实例或null
protected PropertyChangeListener createPropertyChangeListener()
PropertyChangeListener
,它将被添加到组合框中。
如果此方法返回null,则不会将其添加到组合框中。
PropertyChangeListener
的实例或null
protected LayoutManager createLayoutManager()
protected ListCellRenderer createRenderer()
setRenderer
显式设置渲染器时,才使用默认渲染器。
ListCellRender
用于组合框
JComboBox.setRenderer(javax.swing.ListCellRenderer<? super E>)
protected ComboBoxEditor createEditor()
setEditor
显式设置编辑器时,才使用默认编辑器。
ComboBoxEditor
用于组合框
JComboBox.setEditor(javax.swing.ComboBoxEditor)
protected void installComponents()
protected void uninstallComponents()
public void addEditor()
ComboBoxEditor
public void removeEditor()
addEditor()
protected void configureEditor()
addEditor()
protected void unconfigureEditor()
addEditor()
public void configureArrowButton()
createArrowButton()
public void unconfigureArrowButton()
createArrowButton()
protected JButton createArrowButton()
public boolean isPopupVisible(JComboBox c)
isPopupVisible
在
ComboBoxUI
public void setPopupVisible(JComboBox c, boolean v)
setPopupVisible
在
ComboBoxUI
类
public boolean isFocusTraversable(JComboBox c)
isFocusTraversable
在
ComboBoxUI
public void paint(Graphics g, JComponent c)
ComponentUI
ComponentUI.update
指定组件正在被绘制时的方法。
子类应该覆盖此方法,并使用指定的Graphics
对象来呈现Graphics
的内容。
paint
在
ComponentUI
g
- 要绘画的
Graphics
上下文
c
- 正在涂漆的组件;
这个参数经常被忽略,但如果UI对象是无状态的并且被多个组件共享,则可能会被使用
ComponentUI.update(java.awt.Graphics, javax.swing.JComponent)
public Dimension getPreferredSize(JComponent c)
ComponentUI
null
,则首选的大小将由组件的布局管理器(而不是安装了特定布局管理器的任何组件的首选方法)计算出来。
此方法的默认实现返回null
。
getPreferredSize
在
ComponentUI
c
- 要查询其首选大小的组件;
这个参数经常被忽略,但如果UI对象是无状态的并且被多个组件共享,则可能会被使用
JComponent.getPreferredSize()
,
LayoutManager.preferredLayoutSize(java.awt.Container)
public Dimension getMinimumSize(JComponent c)
getMinimumSize
在
ComponentUI
c
- 查询最小大小的组件;
这个参数经常被忽略,但如果UI对象是无状态的并且被多个组件共享,则可能会被使用
Dimension
对象或
null
JComponent.getMinimumSize()
,
LayoutManager.minimumLayoutSize(java.awt.Container)
,
ComponentUI.getPreferredSize(javax.swing.JComponent)
public Dimension getMaximumSize(JComponent c)
ComponentUI
null
,则最大大小将由组件的布局管理器计算(这是安装了特定布局管理器的任何组件的首选方法)。
此方法的默认实现将调用getPreferredSize
并返回该值。
getMaximumSize
在
ComponentUI
c
- 查询最大大小的组件;
这个参数经常被忽略,但如果UI对象是无状态的并且被多个组件共享,则可能会被使用
Dimension
对象或
null
JComponent.getMaximumSize()
,
LayoutManager2.maximumLayoutSize(java.awt.Container)
public int getBaseline(JComponent c, int width, int height)
getBaseline
在
ComponentUI
c
-
JComponent
正在请求基准
width
- 获取基线的宽度
height
- 获得基准的高度
NullPointerException
- 如果
c
是
null
IllegalArgumentException
- 如果宽度或高度<0
JComponent.getBaseline(int, int)
public Component.BaselineResizeBehavior getBaselineResizeBehavior(JComponent c)
getBaselineResizeBehavior
在
ComponentUI
c
-
JComponent
返回基准调整大小行为
NullPointerException
- 如果
c
是
null
JComponent.getBaseline(int, int)
public int getAccessibleChildrenCount(JComponent c)
ComponentUI
Accessible
,这个方法应该返回这个对象的子Accessible
。
UI可能希望覆盖这一点,如果它们显示屏幕上可以被视为组件的区域,但实际组件不用于呈现这些区域。
注意:从v1.3开始,建议开发者调用Component.AccessibleAWTComponent.getAccessibleChildrenCount()
而不是这种方法。
getAccessibleChildrenCount
在
ComponentUI
ComponentUI.getAccessibleChild(javax.swing.JComponent, int)
public Accessible getAccessibleChild(JComponent c, int i)
ComponentUI
i
第Accessible
小孩。
如果屏幕上显示可以被视为组件的区域,UI可能需要重写,但实际组件不用于显示这些区域。
注意:从v1.3开始,建议开发者调用Component.AccessibleAWTComponent.getAccessibleChild()
而不是这种方法。
getAccessibleChild
在
ComponentUI
i
- 基于零的儿童索引
i
第
Accessible
孩子的对象
ComponentUI.getAccessibleChildrenCount(javax.swing.JComponent)
protected boolean isNavigationKey(int keyCode)
protected void selectNextPossibleValue()
protected void selectPreviousPossibleValue()
protected void toggleOpenClose()
protected Rectangle rectangleForCurrentValue()
protected Insets getInsets()
public void paintCurrentValue(Graphics g, Rectangle bounds, boolean hasFocus)
public void paintCurrentValueBackground(Graphics g, Rectangle bounds, boolean hasFocus)
protected Dimension getDefaultSize()
getDisplaySize()
protected Dimension getDisplaySize()
对于具有非常小的项目的组合框,建议使用原型显示值来显着加快显示尺寸计算。
JComboBox.setPrototypeDisplayValue(E)
protected Dimension getSizeForComponent(Component comp)
comp
- 一个
Component
检查
protected void installKeyboardActions()
protected void uninstallKeyboardActions()