- 所有已知的实现类:
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 属性字体、前景和背景之外的所有属性。如果这些属性之一未初始化,或显式设置为 null,则其容器将提供该值。因此,当调用 installUI() 以动态更改组件外观时,"== null" 是不可靠的。所以在 installUI() 时我们检查当前值是否是 UIResource:
if (!(list.getFont() instanceof UIResource)) {
list.setFont(UIManager.getFont("List.font"));
}
- 参见: