Spec-Zone.ru › OpenJDK 24

Класс 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, указав значение для каждого идентификатора класса 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

Краткое описание конструкторов

LookAndFeel()
Модификатор Конструктор Описание
protected
Конструктор для вызова подклассами.

Краткое описание методов

Модификатор и тип Метод Описание
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

protected 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 пары приводит к созданию 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"
   });
 

Предоставление списка связей (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:
  • KeyStroke.getKeyStroke(String)
  • InputMap

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:
  • UIDefaults.LazyValue
  • Icon
  • Class.getResourceAsStream(String)

getLayoutStyle

public LayoutStyle getLayoutStyle()
Возвращает LayoutStyle для данной темы оформления. Никогда не возвращает null.

Обычно вы не используете LayoutStyle из темы оформления, вместо этого используйте метод LayoutStyle getInstance.

Returns:
LayoutStyle для данной темы оформления
Since:
1.6
See Also:
  • LayoutStyle.getInstance()

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:
  • Toolkit.getDesktopProperty(java.lang.String)

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()
Возвращает короткую строку, идентифицирующую эту тему оформления, например, "CDE/Motif". Эта строка должна быть подходящей для пункта меню. Различные темы оформления должны иметь разные имена, например, подкласс MotifLookAndFeel, который изменяет отображение нескольких компонентов, должен называться "CDE/Motif My Way"; это будет полезно пользователю, выбирающему тему оформления из списка имён.
Returns:
короткое имя темы оформления

getID

public abstract String getID()
Возвращает строку, идентифицирующую эту тему оформления. Эта строка будет использоваться приложениями/службами, которые хотят распознать известные реализации тем оформления. В настоящее время известные имена — "Motif", "Windows", "Mac", "Metal". Обратите внимание, что тема оформления, производная от известного суперкласса, который не вносит фундаментальных изменений в вид или ощущение, не должна переопределять этот метод.
Returns:
идентификатор темы оформления

getDescription

public abstract String getDescription()
Возвращает однострочное описание реализации этой темы оформления, например, "Тема оформления CDE/Motif". Эта строка предназначена для пользователя, например, в заголовке окна или сообщении всплывающей подсказки.
Returns:
короткое описание темы оформления

getSupportsWindowDecorations

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

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

Returns:
true, если экземпляры RootPaneUI, созданные этой темой оформления, поддерживают декорирование на стороне клиента
Since:
1.4
See Also:
  • 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, 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API