Класс 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. Подробную информацию о том, как получить реализацию подкласса ComponentUI , см. в UIDefaults.getUI(JComponent) .
При установке 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"
});
Предоставление списка связей (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 возвращаемые RootPaneUI экземпляры поддерживают предоставление Window декораций в JRootPane. По умолчанию возвращается false, подклассы, поддерживающие Window декорации, должны переопределить этот метод и вернуть true.
- Returns:
-
trueеслиRootPaneUIэкземпляры, созданные этим стилем оформления, поддерживают декорации на стороне клиента - 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, 2023, 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/21/docs/api/java.desktop/javax/swing/LookAndFeel.html