Класс LookAndFeel
- Прямые известные подклассы:
-
BasicLookAndFeel,MultiLookAndFeel
public abstract class LookAndFeel extends Object
LookAndFeel, как следует из названия, инкапсулирует внешний вид. Помимо установки внешнего вида, большинству разработчиков не нужно взаимодействовать напрямую с LookAndFeel. В общем случае, только разработчики, создающие пользовательский внешний вид, должны беспокоиться об этом классе. Swing построен на основе принципа, что каждый подкласс JComponent имеет реализацию определенного подкласса ComponentUI. Подкласс ComponentUI часто называется «ui», «ui компонента» или «делегат внешнего вида». Подкласс ComponentUI отвечает за предоставление функциональности внешнего вида компонента. Например, JTree требует реализации подкласса ComponentUI
TreeUI. Реализация конкретного подкласса
ComponentUI предоставляется подклассом LookAndFeel. Каждый подкласс JComponent определяет требуемый подкласс ComponentUI с помощью метода JComponent
getUIClassID.
Каждая реализация LookAndFeel должна предоставить реализацию соответствующего подкласса ComponentUI, указав значение для каждого идентификатора класса ui Swing в объекте
UIDefaults возвращаемом методом getDefaults. Например, BasicLookAndFeel использует BasicTreeUI как конкретную реализацию для TreeUI. Это достигается посредством предоставления пары ключ-значение
"TreeUI"-"javax.swing.plaf.basic.BasicTreeUI" в UIDefaults возвращаемом методом getDefaults. Обратитесь к UIDefaults.getUI(JComponent) для получения подробностей о том, как получить реализацию подкласса ComponentUI.
При установке LookAndFeel UIManager не проверяет, существует ли запись для всех идентификаторов класса ui. В результате будут возникать случайные исключения, если текущий внешний вид не предоставил значение для определенного идентификатора класса ui, и создается экземпляр подкласса JComponent.
Рекомендации по внешнему виду
Как отмечалось вUIManager, каждый LookAndFeel имеет возможность предоставить набор значений по умолчанию, которые накладываются на значения по умолчанию разработчика и системы. Некоторые компоненты Swing требуют, чтобы внешний вид предоставил определенный набор значений по умолчанию. Эти значения документированы в классах, которые требуют конкретных значений по умолчанию. ComponentUIs и значения по умолчанию
ВсеComponentUIs обычно должны устанавливать различные свойства на JComponent, для которого ComponentUI предоставляет внешний вид. Это обычно выполняется при установке
ComponentUI на JComponent. Свойство должно быть установлено только в том случае, если разработчик не установил его. Для значений, отличных от примитивных типов, рекомендуется, чтобы ComponentUI изменял свойство только на
JComponent если текущее значение равно null или реализует UIResource. Если текущее значение равно null или реализует UIResource, это указывает на то, что свойство не было установлено разработчиком, и ui может его изменить. Например, BasicButtonUI.installDefaults изменяет шрифт только на JButton если возвращаемое значение от
button.getFont() равно null или реализует
UIResource. С другой стороны, если button.getFont() вернул значение non-null, которое не реализует UIResource, то BasicButtonUI.installDefaults не будет изменять шрифт JButton. Для примитивных значений, таких как opaque, следует вызывать метод
installProperty. installProperty изменяет соответствующее свойство только в том случае, если оно не было изменено разработчиком.
Реализации ComponentUI должны использовать различные методы установки, предоставляемые этим классом, поскольку они обрабатывают необходимую проверку и устанавливают свойство в соответствии с рекомендациями.
Исключения
Все методы установки, предоставляемыеLookAndFeel, должны получать значения по умолчанию, если значение изменяемого свойства равно null или UIResource. Например, установка шрифта выполняет следующее:
JComponent c;
Font font = c.getFont();
if (font == null || (font instanceof UIResource)) {
c.setFont(UIManager.getFont("fontKey"));
}
Если шрифт равен null или UIResource, таблица значений по умолчанию запрашивается с ключом fontKey. Все методы UIDefault's с суффиксом «get» выбрасывают исключение
NullPointerException при переданном параметре null. Следовательно, за исключением случаев, когда явно указано иначе, каждый из различных методов установки
LookAndFeel выбрасывает исключение NullPointerException если текущее значение равно null или UIResource, а предоставленный ключ значений по умолчанию равен null. Кроме того, за исключением случаев, когда явно указано иначе, все методы install выбрасывают исключение NullPointerException если передан компонент null.- С момента:
- 1.2
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Конструктор для вызова подклассами. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
UIDefaults |
getDefaults() |
Возвращает значения по умолчанию для внешнего вида. |
abstract String |
getDescription() |
Возвращает однострочное описание реализации данного внешнего вида, например: |
static Object |
getDesktopPropertyValue |
Возвращает значение указанной системной свойства рабочего стола, вызывая Toolkit.getDefaultToolkit().getDesktopProperty(). |
Icon |
getDisabledIcon |
Возвращает Icon с отключённым внешним видом. |
Icon |
getDisabledSelectedIcon |
Возвращает Icon для использования отключёнными компонентами, которые также выбраны. |
abstract String |
getID() |
Возвращает строку, идентифицирующую этот внешний вид. |
LayoutStyle |
getLayoutStyle() |
Возвращает LayoutStyle для данного внешнего вида. |
abstract String |
getName() |
Возвращает короткую строку, идентифицирующую этот внешний вид, например: |
boolean |
getSupportsWindowDecorations() |
Возвращает true, если возвращенные LookAndFeel экземпляры поддерживают предоставление декораций Window в JRootPane. |
void |
initialize() |
Инициализирует внешний вид. |
static void |
installBorder |
Метод для установки свойства границы компонента со значением из значений по умолчанию. |
static void |
installColors |
Метод для установки свойств цвета переднего и заднего плана компонента со значениями из значений по умолчанию. |
static void |
installColorsAndFont |
Метод для установки свойств цвета переднего и заднего плана и шрифта компонента со значениями из значений по умолчанию. |
static void |
installProperty |
Метод для установки свойства с указанным именем и значением на компонент, если это свойство ещё не установлено разработчиком. |
abstract boolean |
isNativeLookAndFeel() |
Если у базовой платформы есть "родной" внешний вид, и это его реализация, вернуть true. |
abstract boolean |
isSupportedLookAndFeel() |
Возвращает true, если базовая платформа поддерживает или допускает этот внешний вид. |
static void |
loadKeyBindings |
Заполняет InputMap указанными связями. |
static ComponentInputMap |
makeComponentInputMap |
Создаёт ComponentInputMapUIResource из keys. |
static Object |
makeIcon |
Создаёт и возвращает UIDefault.LazyValue для загрузки изображения. |
static InputMap |
makeInputMap |
Создаёт InputMapUIResource из keys. |
static JTextComponent.KeyBinding[] |
makeKeyBindings |
Метод для построения массива
KeyBindings. |
void |
provideErrorFeedback |
Вызывается, когда пользователь пытается выполнить недопустимую операцию, например, вставить в недоступный JTextField с фокусом. |
String |
toString() |
Возвращает строку, отображающую и идентифицирующую свойства этого объекта. |
void |
uninitialize() |
Деинициализирует внешний вид. |
static void |
uninstallBorder |
Метод для отключения границы. |
Подробное описание конструкторов
LookAndFeel
protected LookAndFeel()
Подробное описание методов
installColors
public static void installColors(JComponent c, String defaultBgName, String defaultFgName)
null , либо UIResource. - Параметры:
-
c- компонент, для которого устанавливаются цвета -
defaultBgName- ключ для заднего плана -
defaultFgName- ключ для переднего плана - Исключения:
-
NullPointerException- как описано в исключениях - См. также:
installColorsAndFont
public static void installColorsAndFont(JComponent c, String defaultBgName, String defaultFgName, String defaultFontName)
null , либо UIResource.- Параметры:
-
c- компонент, для которого устанавливаются цвета и шрифт -
defaultBgName- ключ для заднего плана -
defaultFgName- ключ для переднего плана -
defaultFontName- ключ для шрифта - Исключения:
-
NullPointerException- как описано в исключениях - См. также:
installBorder
public static void installBorder(JComponent c, String defaultBorderName)
null или является экземпляром UIResource.- Параметры:
-
c- компонент, для которого устанавливается рамка -
defaultBorderName- ключ, определяющий рамку - Исключения:
-
NullPointerException- как описано в исключениях
uninstallBorder
public static void uninstallBorder(JComponent c)
UIResource, она устанавливается в
null.- Параметры:
-
c- компонент, для которого удаляется рамка - Исключения:
-
NullPointerException- еслиcравноnull
installProperty
public static void installProperty(JComponent c, String propertyName, Object propertyValue)
UIResource, этот метод использует внутреннее состояние для определения, было ли свойство установлено клиентом.- Параметры:
-
c- целевой компонент, на котором устанавливается свойство -
propertyName- имя свойства, которое нужно установить -
propertyValue- значение свойства - Исключения:
-
IllegalArgumentException- если указанное свойство не может быть установлено с помощью этого метода -
ClassCastException- если значение свойства не было установлено разработчиком и тип не соответствует типу свойства -
NullPointerException- еслиcравноnull, или если указанное свойство не было установлено разработчиком, иpropertyValueравноnull - С момента:
- 1.5
makeKeyBindings
public static JTextComponent.KeyBinding[] makeKeyBindings(Object[] keyBindingList)
KeyBindings. Хотя этот метод не устарел, разработчикам следует использовать ActionMap и InputMap для задания сочетаний клавиш. Этот метод возвращает массив KeyBindings, по одному для каждой пары key-action в keyBindingList. key может быть либо String в формате, заданном методом KeyStroke.getKeyStroke, либо KeyStroke. Часть action пары — это String, соответствующая имени
Action.
Следующий пример демонстрирует создание массива KeyBinding из шести пар key-action.
JTextComponent.KeyBinding[] multilineBindings = makeKeyBindings( new Object[] {
"UP", DefaultEditorKit.upAction,
"DOWN", DefaultEditorKit.downAction,
"PAGE_UP", DefaultEditorKit.pageUpAction,
"PAGE_DOWN", DefaultEditorKit.pageDownAction,
"ENTER", DefaultEditorKit.insertBreakAction,
"TAB", DefaultEditorKit.insertTabAction
});
Если длина keyBindingList's нечетная, последний элемент игнорируется. Предоставление значения null для части key или action пары key-action приводит к созданию KeyBinding с соответствующим значением null. Поскольку другие части Swing ожидают значения non-null в KeyBinding, следует избегать использования null в качестве части key или action пары key-action.
- Параметры:
-
keyBindingList- массив парkey-action - Возвращает:
- массив
KeyBindings - Исключения:
-
NullPointerException- еслиkeyBindingListравноnull -
ClassCastException- если частьkeyпары не являетсяKeyStrokeилиString, или частьactionпары не являетсяString - См. также:
makeInputMap
public static InputMap makeInputMap(Object[] keys)
InputMapUIResource из keys. Это удобный метод для создания нового InputMapUIResource, вызова loadKeyBindings(map, keys), и возвращения InputMapUIResource.- Параметры:
-
keys- чередующиеся парыkeystroke-action keyпар, как описано вloadKeyBindings(javax.swing.InputMap, java.lang.Object[]) - Возвращает:
- созданный и заполненный
InputMapUIResource - С момента:
- 1.3
- См. также:
makeComponentInputMap
public static ComponentInputMap makeComponentInputMap(JComponent c, Object[] keys)
ComponentInputMapUIResource из keys. Это удобный метод для создания нового ComponentInputMapUIResource, вызова
loadKeyBindings(map, keys), и возвращения
ComponentInputMapUIResource.- Параметры:
-
c- компонент для созданияComponentInputMapUIResourceс -
keys- чередующиеся парыkeystroke-action keyпар, как описано вloadKeyBindings(javax.swing.InputMap, java.lang.Object[]) - Возвращает:
- созданный и заполненный
InputMapUIResource - Исключения:
-
IllegalArgumentException- еслиcравноnull - С момента:
- 1.3
- См. также:
loadKeyBindings
public static void loadKeyBindings(InputMap retMap, Object[] keys)
InputMap указанными связями. Связи предоставляются в виде списка пар keystroke-action key, чередующихся в порядке. keystroke — это экземпляр KeyStroke, или String, идентифицирующий KeyStroke для связи. Обратитесь к KeyStroke.getKeyStroke(String) за подробным форматом. action key часть пары — это ключ, зарегистрированный в InputMap для KeyStroke. Пример загрузки InputMap с двумя парами key-action:
LookAndFeel.loadKeyBindings(inputMap, new Object[] {
"control X", "cut",
"control V", "paste"
});
Предоставление списка связей null (keys) не изменяет retMap никоим образом.
Указание null action key приводит к удалению записи keystroke's из InputMap. null keystroke игнорируется.
- Parameters:
-
retMap-InputMapдля добавления парkey-action -
keys- связи для добавления вretMap - Throws:
-
NullPointerException- еслиkeysявляетсяnon-null, не пустым, иretMapявляетсяnull - Since:
- 1.3
- See Also:
makeIcon
public static Object makeIcon(Class<?> baseClass, String gifFile)
UIDefault.LazyValue, который загружает изображение. Возвращаемое значение является реализацией
UIDefaults.LazyValue. При вызове createValue на возвращаемом объекте, изображение загружается. Если изображение
non-null, оно затем оборачивается в Icon, который реализует
UIResource. Изображение загружается с помощью
Class.getResourceAsStream(gifFile). Этот метод никак не проверяет аргументы. Настоятельно рекомендуется, чтобы были предоставлены значения non-null, иначе могут возникнуть исключения при вызове createValue на возвращаемом объекте.
- Parameters:
-
baseClass-Classиспользуемый для загрузки ресурса -
gifFile- путь к изображению для загрузки - Returns:
- a
UIDefaults.LazyValue; при разрешенииLazyValueзагружает указанное изображение - See Also:
getLayoutStyle
public LayoutStyle getLayoutStyle()
LayoutStyle для данной темы оформления. Никогда не возвращает null. Обычно вы не используете LayoutStyle из темы оформления, вместо этого используйте метод LayoutStyle getInstance.
- Returns:
- the
LayoutStyleдля данной темы оформления - Since:
- 1.6
- See Also:
provideErrorFeedback
public void provideErrorFeedback(Component component)
JTextField с фокусом. По умолчанию происходит звуковой сигнал. Подклассы, желающие иного поведения, должны переопределить этот метод и предоставить дополнительную обратную связь.- Parameters:
-
component-Componentв котором произошла ошибка, может бытьnull, указывающий, что условие ошибки не напрямую связано сComponent - Since:
- 1.4
getDesktopPropertyValue
public static Object getDesktopPropertyValue(String systemPropertyName, Object fallbackValue)
Toolkit.getDefaultToolkit().getDesktopProperty(). Если значение указанной свойства является null, возвращается fallbackValue. - Parameters:
-
systemPropertyName- имя системного свойства рабочего стола, запрашиваемого -
fallbackValue- объект, который будет возвращен как значение, если системное значение равно null - Returns:
- текущее значение свойства рабочего стола
- Since:
- 1.4
- See Also:
getDisabledIcon
public Icon getDisabledIcon(JComponent component, Icon icon)
Icon с неактивным видом. Этот метод используется для генерации неактивного Icon когда он не был указан. Например, если вы создаёте JButton и указываете только Icon через setIcon, этот метод будет вызван для генерации неактивного Icon. Если null передаётся как icon, этот метод возвращает null. Некоторые темы оформления могут не отображать неактивное Icon, в таком случае они игнорируют этот метод.
- Parameters:
-
component-JComponent, который будет отображатьIcon, может бытьnull -
icon-Iconдля генерации неактивного значка - Returns:
- неактивный
Icon, илиnullесли подходящийIconне может быть сгенерирован - Since:
- 1.5
getDisabledSelectedIcon
public Icon getDisabledSelectedIcon(JComponent component, Icon icon)
Icon для использования неактивными компонентами, которые также выбраны. Этот метод используется для генерации Icon для компонентов, которые находятся в состояниях как неактивного, так и выбранного, но не имеют конкретного Icon для этого состояния. Например, если вы создаёте JButton и указываете только Icon через setIcon, этот метод будет вызван для генерации неактивного и выбранного Icon. Если null передаётся как icon, этот метод возвращает null. Некоторые темы оформления могут не отображать неактивные и выбранные Icon, в таком случае они игнорируют этот метод.
- Parameters:
-
component-JComponent, который отобразитIcon, может бытьnull -
icon-Iconдля генерации неактивного и выбранного значка - Returns:
- неактивный и выбранный значок, или
nullесли подходящийIconне может быть сгенерирован. - Since:
- 1.5
getName
public abstract String getName()
- Returns:
- короткий идентификатор темы оформления
getID
public abstract String getID()
- Returns:
- идентификатор темы оформления
getDescription
public abstract String getDescription()
- Returns:
- краткое описание темы оформления
getSupportsWindowDecorations
public boolean getSupportsWindowDecorations()
true, если создаваемые данным LookAndFeel экземпляры поддерживают предоставление Window декораций в JRootPane. По умолчанию возвращает false, подклассы, поддерживающие Window декорации, должны переопределить этот метод и вернуть true.
- Returns:
-
trueесли экземпляры, созданные этой темой оформления, поддерживают декорации на стороне клиента - Since:
- 1.4
- See Also:
isNativeLookAndFeel
public abstract boolean isNativeLookAndFeel()
true. Например, когда на платформе Solaris используется CDE, реализация темы оформления CDE/Motif вернет
true.- Returns:
-
trueесли эта тема оформления представляет родную тему оформления платформы
isSupportedLookAndFeel
public abstract boolean isSupportedLookAndFeel()
true , если платформа поддерживает и разрешает данный вид. Этот метод возвращает false , если вид зависит от специальных ресурсов или соглашений, которые не определены для текущей платформы.- Возвращает:
-
true, если вид поддерживается - См. также:
initialize
public void initialize()
UIManager , когда вид установлен в качестве текущего. Этот метод вызывается до того, как UIManager вызовет getDefaults. Этот метод предназначен для выполнения любой инициализации для вида. Подклассы должны выполнять однократную настройку здесь, а не в статическом инициализаторе, так как объекты класса вида могут быть загружены только для того, чтобы выяснить, что isSupportedLookAndFeel() возвращает false.uninitialize
public void uninitialize()
UIManager при удалении вида. Например, UIManager.setLookAndFeel вызывает это, когда меняется вид. Подклассы могут выбрать освобождение некоторых ресурсов здесь.
getDefaults
public UIDefaults getDefaults()
UIManager , когда вид установлен в качестве текущего и после вызова initialize.- Возвращает:
- значения по умолчанию вида
- См. также:
toString
public String toString()
- Переопределяет:
-
toStringв классеObject - Возвращает:
- строковое представление этого объекта
© 1993, 2021, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/17/docs/api/java.desktop/javax/swing/LookAndFeel.html