Класс 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 |
Вспомогательный метод для удаления границы. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создает и возвращает копию этого объекта. |
boolean |
equals |
Показывает, равен ли другой объект этому объекту. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API подлежит удалению в будущей версии. Финализация объявлена устаревшей и подлежит удалению в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно после получения уведомления или прерывания. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно после получения уведомления или прерывания, либо до истечения определенного периода реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно после получения уведомления или прерывания, либо до истечения определенного периода реального времени. |
Подробное описание конструкторов
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(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. Если null передано как icon, этот метод возвращает 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. Если null передано как icon, этот метод возвращает 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.