- 所有已知的实现类:
-
ActionMapUIResource,BasicBorders.ButtonBorder,BasicBorders.FieldBorder,BasicBorders.MarginBorder,BasicBorders.MenuBarBorder,BasicBorders.RadioButtonBorder,BasicBorders.RolloverButtonBorder,BasicBorders.SplitPaneBorder,BasicBorders.ToggleButtonBorder,BasicComboBoxEditor.UIResource,BasicComboBoxRenderer.UIResource,BasicTextUI.BasicCaret,BasicTextUI.BasicHighlighter,BorderUIResource,BorderUIResource.BevelBorderUIResource,BorderUIResource.CompoundBorderUIResource,BorderUIResource.EmptyBorderUIResource,BorderUIResource.EtchedBorderUIResource,BorderUIResource.LineBorderUIResource,BorderUIResource.MatteBorderUIResource,BorderUIResource.TitledBorderUIResource,ColorUIResource,ComponentInputMapUIResource,DefaultListCellRenderer.UIResource,DefaultMenuLayout,DefaultTableCellRenderer.UIResource,DimensionUIResource,FontUIResource,IconUIResource,InputMapUIResource,InsetsUIResource,JScrollPane.ScrollBar,MetalBorders.ButtonBorder,MetalBorders.Flush3DBorder,MetalBorders.InternalFrameBorder,MetalBorders.MenuBarBorder,MetalBorders.MenuItemBorder,MetalBorders.OptionDialogBorder,MetalBorders.PaletteBorder,MetalBorders.PopupMenuBorder,MetalBorders.RolloverButtonBorder,MetalBorders.ScrollPaneBorder,MetalBorders.TextFieldBorder,MetalBorders.ToggleButtonBorder,MetalBorders.ToolBarBorder,MetalCheckBoxIcon,MetalComboBoxEditor.UIResource,MetalIconFactory.PaletteCloseIcon,ScrollPaneLayout.UIResource
public interface UIResource
此接口用于标记由ComponentUI代理创建的对象。ComponentUI.installUI()和ComponentUI.uninstallUI()方法可以使用此接口来判断属性值是否已被覆盖。例如,JList的cellRenderer属性由BasicListUI.installUI()初始化,仅当其初始值为null时:
if (list.getCellRenderer() == null) {
list.setCellRenderer((ListCellRenderer)(UIManager.get("List.cellRenderer")));
}
在uninstallUI()时,如果属性值是UIResource的实例,我们将将属性重置为null:
if (list.getCellRenderer() instanceof UIResource) {
list.setCellRenderer(null);
}
此模式适用于除java.awt.Component属性font、foreground和background之外的所有属性。如果这些属性之一未初始化,或者明确设置为null,则其容器提供值。因此,在installUI()调用以动态更改组件的外观和感觉时,使用"== null"是不可靠的。因此,在installUI()时,我们检查当前值是否为UIResource:
if (!(list.getFont() instanceof UIResource)) {
list.setFont(UIManager.getFont("List.font"));
}
- 参见: