Класс LookAndFeel

Прямые известные подклассы:
BasicLookAndFeel, MultiLookAndFeel
public abstract class LookAndFeel
extends Object

LookAndFeel, как следует из названия, инкапсулирует вид и ощущения. Помимо установки вида и ощущений, большинству разработчиков не нужно взаимодействовать напрямую с LookAndFeel. В общем, только разработчики, создающие пользовательский вид и ощущения, должны беспокоиться об этом классе.

Swing построен на том, что каждый подкласс JComponent имеет реализацию определенного подкласса ComponentUI. Подкласс ComponentUI часто упоминается как «ui», «component ui» или «делегат вида и ощущений». Подкласс ComponentUI отвечает за предоставление функциональности вида и ощущений компонента. Например, JTree требует реализации подкласса ComponentUI TreeUI. Реализация конкретного подкласса ComponentUI предоставляется LookAndFeel. Каждый подкласс JComponent определяет подкласс ComponentUI с помощью метода JComponent getUIClassID.

Каждая реализация LookAndFeel должна предоставить реализацию соответствующего подкласса ComponentUI, указав значение для каждого идентификатора класса Swing ui в объекте UIDefaults возвращаемом из getDefaults. Например, BasicLookAndFeel использует BasicTreeUI в качестве конкретной реализации для TreeUI. Это достигается путем того, что BasicLookAndFeel предоставляет пару «ключ-значение» "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 возвращающие значение выбрасывают NullPointerException если в качестве аргумента передано null. Таким образом, если не указано иное, каждый из различных методов установки LookAndFeel выбрасывает NullPointerException если текущее значение является null или UIResource и заданный ключ значений по умолчанию является null. Кроме того, если не указано иное, все методы install выбрасывают NullPointerException если компонент null передан в качестве аргумента.
C момента:
1.2

Конструкторы

Конструктор Описание
LookAndFeel()

Методы

Модификатор и тип Метод Описание
UIDefaults getDefaults()

Возвращает значения по умолчанию вида и ощущений.

abstract String getDescription()

Возвращает однострочное описание реализации вида и ощущений, например:

static Object getDesktopPropertyValue​(String systemPropertyName, Object fallbackValue)

Возвращает значение указанного системного свойства рабочего стола, вызывая Toolkit.getDefaultToolkit().getDesktopProperty().

Icon getDisabledIcon​(JComponent component, Icon icon)

Возвращает Icon с отключенным внешним видом.

Icon getDisabledSelectedIcon​(JComponent component, Icon icon)

Возвращает Icon для использования отключенными компонентами, которые также выбраны.

abstract String getID()

Возвращает строку, идентифицирующую вид и ощущения.

LayoutStyle getLayoutStyle()

Возвращает LayoutStyle для этого вида и ощущений.

abstract String getName()

Возвращает короткую строку, идентифицирующую вид и ощущения, например:

boolean getSupportsWindowDecorations()

Возвращает true если экземпляры LookAndFeel возвращаемые RootPaneUI поддерживают предоставление декораций Window в JRootPane.

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()

Если у платформы есть "родной" вид и ощущения, и это его реализация, то верните true.

abstract boolean isSupportedLookAndFeel()

Верните true если платформа поддерживает и/или разрешает этот вид и ощущения.

static void loadKeyBindings​(InputMap retMap, Object[] keys)

Заполняет InputMap указанными связями.

static ComponentInputMap makeComponentInputMap​(JComponent c, Object[] keys)

Создает ComponentInputMapUIResource из keys.

static Object makeIcon​(Class<?> baseClass, String gifFile)

Создает и возвращает UIDefault.LazyValue, который загружает изображение.

static InputMap makeInputMap​(Object[] keys)

Создает InputMapUIResource из keys.

static JTextComponent.KeyBinding[] makeKeyBindings​(Object[] keyBindingList)

Удобный метод для создания массива KeyBindings.

void provideErrorFeedback​(Component component)

Вызывается, когда пользователь пытается выполнить недопустимую операцию, например, вставить в недопустимый JTextField , который имеет фокус.

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()

Возвращает однострочное описание этой реализации стиля оформления, например, "The CDE/Motif Look and Feel". Эта строка предназначена для пользователя, например, в заголовке окна или в сообщении всплывающей подсказки.

Возвращает:
краткое описание стиля оформления

getSupportsWindowDecorations

public boolean getSupportsWindowDecorations()

Возвращает LookAndFeel, если RootPaneUI экземпляры, возвращаемые true, поддерживают предоставление декораций окна в JRootPane.

Реализация по умолчанию возвращает false, подклассы, которые поддерживают Window декорации, должны переопределить этот метод и вернуть true.

Возвращает:
true , если экземпляры, созданные этим стилем оформления, поддерживают декорации на стороне клиента
С:
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(), UIManager.setLookAndFeel(javax.swing.LookAndFeel)

uninitialize

public void uninitialize()

Деинициализирует стиль оформления. Хотя этот метод является публичным, его должен вызывать только UIManager , когда стиль оформления удаляется. Например, UIManager.setLookAndFeel вызывает этот метод при изменении стиля оформления.

Подклассы могут выбрать освобождение некоторых ресурсов здесь.

См. также:
initialize(), UIManager.setLookAndFeel(javax.swing.LookAndFeel)

getDefaults

public UIDefaults getDefaults()

Возвращает значения по умолчанию для стиля оформления. Хотя этот метод является публичным, его должен вызывать только UIManager при установке стиля оформления в качестве текущего и после вызова initialize.

Возвращает:
значения по умолчанию для стиля оформления
См. также:
initialize(), uninitialize(), UIManager.setLookAndFeel(javax.swing.LookAndFeel)

toString

public String toString()

Возвращает строку, отображающую и идентифицирующую свойства этого объекта.

Переопределяет:
toString в классе Object
Возвращает:
строковое представление этого объекта

© 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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/javax/swing/LookAndFeel.html

Spec-Zone .ru
спецификации, руководства, описания, API