Класс LookAndFeel
- Прямые известные подклассы:
BasicLookAndFeel, MultiLookAndFeel
public abstract class LookAndFeel extends Object
LookAndFeel, как следует из названия, инкапсулирует внешний вид и стиль. Помимо установки внешнего вида и стиля большинству разработчиков никогда не требуется напрямую взаимодействовать с LookAndFeel. Как правило, этим классом должны заниматься только разработчики, создающие пользовательский внешний вид и стиль. Swing построен на основе, согласно которой каждый подкласс JComponent имеет реализацию определённого подкласса ComponentUI. ComponentUI часто называют «пользовательским интерфейсом», «интерфейсом компонента» или «делегатом внешнего вида и стиля». Подкласс ComponentUI отвечает за предоставление специфичных для внешнего вида и стиля функций компонента. Например, JTree требует реализации подкласса ComponentUI
TreeUI. Реализация конкретного подкласса
ComponentUI предоставляется классом LookAndFeel. Каждый подкласс JComponent определяет требуемый ему подкласс ComponentUI с помощью метода JComponent
getUIClassID.
Каждая реализация LookAndFeel должна предоставлять реализацию соответствующего подкласса ComponentUI, задавая значение для каждого идентификатора класса пользовательского интерфейса Swing в объекте
UIDefaults, возвращаемом методом getDefaults. Например, BasicLookAndFeel использует BasicTreeUI в качестве конкретной реализации для TreeUI. Это достигается тем, что
BasicLookAndFeel предоставляет пару «ключ — значение»
"TreeUI"-"javax.swing.plaf.basic.BasicTreeUI" в объекте UIDefaults, возвращаемом методом getDefaults. Подробные сведения о том, как получается реализация подкласса ComponentUI, см. в разделе UIDefaults.getUI(JComponent).
При установке LookAndFeel класс UIManager не проверяет наличие записи для всех идентификаторов классов пользовательского интерфейса. Поэтому могут возникать случайные исключения, если текущий внешний вид и стиль не предоставил значение для конкретного идентификатора класса пользовательского интерфейса, а создан экземпляр подкласса JComponent.
Рекомендации для внешнего вида и стиля
Как отмечено вUIManager, каждый LookAndFeel может предоставить набор значений по умолчанию, которые объединяются со значениями по умолчанию разработчика и системы. Некоторым компонентам Swing требуется, чтобы внешний вид и стиль предоставлял определённый набор значений по умолчанию. Эти требования описаны в классах, которым нужны соответствующие значения. Пользовательские интерфейсы компонентов и значения по умолчанию
ВсеComponentUIs обычно должны задавать различные свойства для JComponent, для которого ComponentUI предоставляет внешний вид и стиль. Обычно это выполняется при установке
ComponentUI для JComponent. Свойство следует задавать только в том случае, если разработчик ещё не установил его. Для значений непримитивных типов рекомендуется, чтобы ComponentUI изменял свойство у
JComponent, только если текущее значение равно null или реализует UIResource. Если текущее значение равно null или реализует UIResource, это означает, что разработчик не задавал свойство и пользовательский интерфейс может его изменить. Например, 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 выбрасывают
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, возвращённые RootPaneUI, поддерживают предоставление 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 нечётная, последний элемент игнорируется. Если в качестве key или action части пары key-action указано значение null, создаётся 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(InputMap, 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(InputMap, 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 игнорируется.
- Параметры:
-
retMap—InputMap, в который добавляются парыkey-action -
keys— привязки, добавляемые вretMap - Исключения:
-
NullPointerException— еслиkeysравноnon-null, не пусто, аretMapравноnull - С версии:
- 1.3
- См. также:
makeIcon
public static Object makeIcon(Class<?> baseClass, String gifFile)
UIDefault.LazyValue, загружающий изображение. Возвращаемое значение является реализацией
UIDefaults.LazyValue. При вызове createValue для возвращённого объекта изображение загружается. Если изображение
non-null, оно затем оборачивается в Icon, реализующий
UIResource. Изображение загружается с помощью
Class.getResourceAsStream(gifFile). Этот метод никак не проверяет аргументы. Настоятельно рекомендуется передавать значения non-null, иначе при вызове createValue для возвращённого объекта могут возникнуть исключения.
- Параметры:
-
baseClass—Class, используемый для загрузки ресурса -
gifFile— путь к загружаемому изображению - Возвращает:
UIDefaults.LazyValue; при разрешенииLazyValueзагружает указанное изображение- См. также:
getLayoutStyle
public LayoutStyle getLayoutStyle()
LayoutStyle для данного внешнего вида и оформления. Этот метод никогда не возвращает null. Как правило, не следует получать LayoutStyle из внешнего вида и оформления; вместо этого используйте метод LayoutStyle getInstance.
- Возвращает:
LayoutStyleдля данного внешнего вида и оформления- С версии:
- 1.6
- См. также:
provideErrorFeedback
public void provideErrorFeedback(Component component)
JTextField, находящийся в фокусе. Реализация по умолчанию подаёт звуковой сигнал. Подклассы, которым требуется другое поведение, должны переопределить этот метод и предоставить дополнительные средства обратной связи.- Параметры:
-
component—Component, в котором произошла ошибка; может бытьnull, если ошибка напрямую не связана сComponent - С версии:
- 1.4
getDesktopPropertyValue
public static Object getDesktopPropertyValue(String systemPropertyName, Object fallbackValue)
Toolkit.getDefaultToolkit().getDesktopProperty(). Если значение указанного свойства равно null, возвращается fallbackValue.- Параметры:
-
systemPropertyName— имя запрашиваемого системного свойства рабочего стола -
fallbackValue— объект, возвращаемый в качестве значения, если системное значение равно null - Возвращает:
- текущее значение свойства рабочего стола
- С версии:
- 1.4
- См. также:
getDisabledIcon
public Icon getDisabledIcon(JComponent component, Icon icon)
Icon с неактивным видом. Этот метод используется для создания неактивного Icon, если оно не было задано. Например, если создать JButton и задать только Icon с помощью setIcon, этот метод будет вызван для создания неактивного Icon. Если в качестве icon передано null, метод возвращает null. Некоторые варианты внешнего вида и оформления могут не отображать неактивное Icon; в этом случае они проигнорируют его.
- Параметры:
-
component—JComponent, отображающийIcon; может бытьnull -
icon—Icon, на основе которого создаётся неактивный значок - Возвращает:
- неактивное
Iconилиnull, если подходящееIconсоздать невозможно - С версии:
- 1.5
getDisabledSelectedIcon
public Icon getDisabledSelectedIcon(JComponent component, Icon icon)
Icon для неактивных выбранных компонентов. Этот метод используется для создания Icon для компонентов, которые одновременно находятся в неактивном и выбранном состоянии, но для этого состояния у них не задано специальное Icon. Например, если создать JButton и задать только Icon с помощью setIcon, этот метод будет вызван для создания неактивного выбранного Icon. Если в качестве icon передано null, метод возвращает null. Некоторые варианты внешнего вида и оформления могут не отображать неактивное выбранное Icon; в этом случае они проигнорируют его.
- Параметры:
-
component—JComponent, отображающийIcon; может бытьnull -
icon—Icon, на основе которого создаётся неактивный выбранный значок - Возвращает:
- неактивный выбранный значок или
null, если подходящееIconсоздать невозможно. - С версии:
- 1.5
getName
public abstract String getName()
- Возвращает:
- краткий идентификатор внешнего вида и оформления
getID
public abstract String getID()
- Возвращает:
- идентификатор внешнего вида и оформления
getDescription
public abstract String getDescription()
- Возвращает:
- краткое описание внешнего вида и оформления
getSupportsWindowDecorations
public boolean getSupportsWindowDecorations()
true, если экземпляры LookAndFeel, возвращаемые RootPaneUI, поддерживают предоставление Window декораций в JRootPane. Реализация по умолчанию возвращает false. Подклассы, поддерживающие декорации Window, должны переопределить этот метод и возвращать true.
- Возвращает:
-
true, если экземплярыRootPaneUI, создаваемые этим вариантом внешнего вида и оформления, поддерживают декорации на стороне клиента - С версии:
- 1.4
- См. также:
isNativeLookAndFeel
public abstract boolean isNativeLookAndFeel()
true. Например, если базовая платформа — Solaris под управлением CDE, реализация внешнего вида и оформления CDE/Motif вернёт
true.- Возвращает:
-
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
© 1993, 2025, 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/25/docs/api/java.desktop/javax/swing/LookAndFeel.html