Класс LookAndFeel
- java.lang.Object
-
- javax.swing.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.Конструкторы
| Конструктор и описание |
|---|
LookAndFeel() |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
UIDefaults |
getDefaults() Возвращает значения по умолчанию вида и ощущений. |
abstract String |
getDescription() Возвращает однострочное описание этой реализации вида и ощущений, например: |
static Object |
getDesktopPropertyValue(String systemPropertyName,
Object fallbackValue) Возвращает значение указанного системного свойства рабочего стола, вызвав |
Icon |
getDisabledIcon(JComponent component,
Icon icon) Возвращает |
Icon |
getDisabledSelectedIcon(JComponent component,
Icon icon) Возвращает |
abstract String |
getID() Возвращает строку, идентифицирующую этот вид и ощущения. |
LayoutStyle |
getLayoutStyle() Возвращает |
abstract String |
getName() Возвращает короткую строку, идентифицирующую этот вид и ощущения, например: |
boolean |
getSupportsWindowDecorations() Возвращает |
void |
initialize() Инициализирует вид и ощущения. |
static void |
installBorder(JComponent c,
String defaultBorderName) Удобный метод для установки свойства границы компонента со значением из значений по умолчанию. |
static void |
installColors(JComponent c,
String defaultBgName,
String defaultFgName) Удобный метод для установки свойств цвета переднего и заднего плана компонента со значениями из значений по умолчанию. |
static void |
installColorsAndFont(JComponent c,
String defaultBgName,
String defaultFgName,
String defaultFontName) Удобный метод для установки свойств цвета переднего плана, заднего плана и шрифта компонента со значениями из значений по умолчанию. |
static void |
installProperty(JComponent c,
String propertyName,
Object propertyValue) Удобный метод для установки свойства с указанным именем и значением на компоненте, если это свойство еще не было установлено разработчиком. |
abstract boolean |
isNativeLookAndFeel() Если у базовой платформы есть «родной» вид и ощущения, и это его реализация, возвращает |
abstract boolean |
isSupportedLookAndFeel() Возвращает |
static void |
loadKeyBindings(InputMap retMap,
Object[] keys) Заполняет |
static ComponentInputMap |
makeComponentInputMap(JComponent c,
Object[] keys) Создаёт |
static Object |
makeIcon(Class<?> baseClass,
String gifFile) Создаёт и возвращает |
static InputMap |
makeInputMap(Object[] keys) Создает |
static JTextComponent.KeyBinding[] |
makeKeyBindings(Object[] keyBindingList) Удобный метод для создания массива |
void |
provideErrorFeedback(Component component) Вызывается, когда пользователь пытается выполнить недопустимую операцию, такую как вставка в недопустимое для редактирования |
String |
toString() Возвращает строку, отображающую и идентифицирующую свойства этого объекта. |
void |
uninitialize() Деинициализирует вид и ощущения. |
static void |
uninstallBorder(JComponent c) Удобный метод для отключения границы. |
Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait Конструкторы
LookAndFeel
public LookAndFeel()
Методы
installColors
public static void installColors(JComponent c,
String defaultBgName,
String defaultFgName) Удобный метод для установки свойств цвета переднего и заднего плана компонента со значениями по умолчанию. Свойства устанавливаются только в том случае, если текущее значение равно либо null либо UIResource.
- Параметры:
-
c- компонент, на котором устанавливаются цвета -
defaultBgName- ключ для заднего фона -
defaultFgName- ключ для переднего плана - Исключения:
-
NullPointerException- как описано в исключениях - См. также:
-
installColorsAndFont(javax.swing.JComponent, java.lang.String, java.lang.String, java.lang.String),UIManager.getColor(java.lang.Object)
installColorsAndFont
public static void installColorsAndFont(JComponent c,
String defaultBgName,
String defaultFgName,
String defaultFontName) Удобный метод для установки свойств цвета переднего и заднего плана, а также шрифта компонента со значениями по умолчанию. Свойства устанавливаются только в том случае, если текущее значение равно либо null или UIResource.
- Параметры:
-
c- компонент, на котором устанавливаются цвета и шрифт -
defaultBgName- ключ для заднего фона -
defaultFgName- ключ для переднего плана -
defaultFontName- ключ для шрифта - Исключения:
-
NullPointerException- как описано в исключениях - См. также:
-
installColors(javax.swing.JComponent, java.lang.String, java.lang.String),UIManager.getColor(java.lang.Object),UIManager.getFont(java.lang.Object)
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) Удобный метод для установки свойства с указанным именем и значением на компоненте, если это свойство еще не было установлено разработчиком. Этот метод предназначен для использования экземплярами делегатов пользовательского интерфейса, которым необходимо указать значение по умолчанию для свойства примитивного типа (boolean, int, ...), но не нужно переопределять значение, установленное клиентом. Поскольку значения свойств примитивных типов не могут быть обернуты маркером 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 - См. также:
-
ActionMap,InputMap,KeyStroke.getKeyStroke(char)
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
- См. также:
loadKeyBindings(javax.swing.InputMap, java.lang.Object[])
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(javax.swing.InputMap, java.lang.Object[]),ComponentInputMapUIResource
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
- См. также:
-
KeyStroke.getKeyStroke(String),InputMap
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загружает указанное изображение - См. также:
-
UIDefaults.LazyValue,Icon,Class.getResourceAsStream(String)
getLayoutStyle
public LayoutStyle getLayoutStyle()
Возвращает LayoutStyle для данного стиля оформления. Это никогда не возвращает null.
Обычно вы не используете LayoutStyle из стиля оформления, вместо этого используйте метод LayoutStyle getInstance.
- Возвращает:
- стиль
LayoutStyleдля данного стиля оформления - С:
- 1.6
- См. также:
LayoutStyle.getInstance()
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
- См. также:
Toolkit.getDesktopProperty(java.lang.String)
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()
Возвращает короткую строку, идентифицирующую этот стиль оформления, например, "CDE/Motif". Эта строка должна быть подходящей для пункта меню. Различные стили оформления должны иметь разные имена, например, подкласс MotifLookAndFeel, изменяющий отображение нескольких компонентов, должен называться "CDE/Motif My Way"; это полезно пользователю при выборе стиля оформления из списка имён.
- Возвращает:
- короткое имя стиля оформления
getID
public abstract String getID()
Возвращает строку, идентифицирующую этот стиль оформления. Эта строка будет использоваться приложениями/службами, которые хотят распознать известные реализации стилей оформления. В настоящее время известные имена - "Motif", "Windows", "Mac", "Metal". Обратите внимание, что стиль оформления, полученный от известного суперкласса, который не вносит фундаментальных изменений в вид или ощущение, не должен переопределять этот метод.
- Возвращает:
- идентификатор стиля оформления
getDescription
public abstract String getDescription()
Возвращает однострочное описание реализации этого стиля оформления, например, "Стиль оформления CDE/Motif". Эта строка предназначена для пользователя, например, в заголовке окна или в сообщении подсказки.
- Возвращает:
- краткое описание стиля оформления
getSupportsWindowDecorations
public boolean getSupportsWindowDecorations()
Возвращает true, если LookAndFeel возвращает RootPaneUI экземпляры, поддерживают предоставление Window украшений в JRootPane.
По умолчанию возвращает false, подклассы, поддерживающие Window украшения, должны переопределить этот метод и вернуть true.
- Возвращает:
-
trueеслиRootPaneUIэкземпляры, созданные этим стилем оформления, поддерживают украшения на стороне клиента - С:
- 1.4
- См. также:
-
JDialog.setDefaultLookAndFeelDecorated(boolean),JFrame.setDefaultLookAndFeelDecorated(boolean),JRootPane.setWindowDecorationStyle(int)
isNativeLookAndFeel
public abstract boolean isNativeLookAndFeel()
Если в базовой платформе есть "родной" стиль оформления, и это его реализация, вернуть true. Например, когда базовая платформа Solaris с CDE, реализация стиля оформления CDE/Motif вернёт true.
- Возвращает:
-
trueесли этот стиль оформления представляет собой базовый стиль оформления платформы
isSupportedLookAndFeel
public abstract boolean isSupportedLookAndFeel()
Возвращает true, если базовая платформа поддерживает или разрешает данный стиль оформления. Этот метод возвращает false, если стиль оформления зависит от специальных ресурсов или соглашений, которые не определены для текущей платформы.
- Возвращает:
-
trueесли это поддерживаемый стиль оформления - См. также:
UIManager.setLookAndFeel(javax.swing.LookAndFeel)
initialize
public void initialize()
Инициализирует стиль оформления. Хотя этот метод является публичным, его должен вызывать только UIManager при установке стиля оформления в качестве текущего. Этот метод вызывается перед тем, как UIManager вызовет getDefaults. Этот метод предназначен для выполнения любой инициализации для стиля оформления. Подклассы должны выполнять здесь любую однократную настройку, а не в статическом инициализаторе, так как объекты класса стиля оформления могут быть загружены только для того, чтобы обнаружить, что isSupportedLookAndFeel() возвращает false.
uninitialize
public void uninitialize()
Деинициализирует стиль оформления. Хотя этот метод является публичным, его должен вызывать только UIManager при удалении стиля оформления. Например, UIManager.setLookAndFeel вызывает этот метод при изменении стиля оформления.
Подклассы могут выбрать освобождение некоторых ресурсов здесь.
getDefaults
public UIDefaults getDefaults()
Возвращает значения по умолчанию стиля оформления. Хотя этот метод является публичным, его должен вызывать только UIManager при установке стиля оформления в качестве текущего и после того, как initialize был вызван.
- Возвращает:
- значения по умолчанию стиля оформления
- См. также:
-
initialize(),uninitialize(),UIManager.setLookAndFeel(javax.swing.LookAndFeel)
toString
public String toString()
Возвращает строку, отображающую и идентифицирующую свойства этого объекта.
© 1993, 2020, 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.