Класс 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, указав значение для каждого идентификатора класса Swing ui в объекте
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 возвращаемые 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 нечётная, последний элемент игнорируется. Предоставление значения null для части 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 на возвращённом объекте, изображение загружается. Если изображение не найдено, оно оборачивается в Icon, реализующий
UIResource. Загрузка изображения происходит с помощью
Class.getResourceAsStream(gifFile). Этот метод не проверяет аргументы. Сильно рекомендуется, чтобы были переданы корректные значения non-null, иначе могут возникнуть исключения при вызове createValue на возвращённом объекте.
- Parameters:
-
baseClass-Class, используемый для загрузки ресурса -
gifFile- путь к изображению для загрузки - Returns:
UIDefaults.LazyValue; при разрешенииLazyValueзагружает указанное изображение- See Also:
getLayoutStyle
public LayoutStyle getLayoutStyle()
LayoutStyle для данной темы оформления. Никогда не возвращает null. Обычно вы не используете LayoutStyle из темы оформления, вместо этого используйте метод LayoutStyle getInstance.
- Returns:
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 в JRootPane. Реализация по умолчанию возвращает false, подклассы, которые поддерживают Window украшения, должны переопределить этот метод и вернуть true.
- Returns:
-
true, если экземплярыRootPaneUI, созданные этой темой оформления, поддерживают декорирование на стороне клиента - Since:
- 1.4
- See Also:
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://download.java.net/java/early_access/jdk24/docs/api/java.desktop/javax/swing/LookAndFeel.html