Spec-Zone .ru
спецификации, руководства, описания, API
|
Формат файла синтезатора (дата) учитывает определение всех частей, необходимых, чтобы создать Ваш собственный стиль. Файл синтезатора загружается посредством SynthLookAndFeel.load (InputStream, Класс) или SynthLookAndFeel.load (URL) методы. Следующий пример использует load
метод, чтобы сконфигурировать a SynthLookAndFeel
и наборы это как текущий стиль:
SynthLookAndFeel laf = new SynthLookAndFeel(); laf.load(MyClass.class.getResourceAsStream("laf.xml"), MyClass.class); UIManager.setLookAndFeel(laf);
Этот пример загружает стиль из входного потока, используя указанный класс в качестве материально-сырьевой базы, чтобы разрешить пути. Также возможно загрузить стиль из произвольного URL как в следующем примере.
SynthLookAndFeel laf = new SynthLookAndFeel(); laf.load(new URL("file:///C:/java/synth/laf/laf.xml")); UIManager.setLookAndFeel(laf);
Метод SynthLookAndFeel.load (URL) может использоваться, например, чтобы загрузить стиль из любого следующего:
file:///C:/java/synth/laf/laf.xml
http://host/laf.xml
jar:file:///C:/synth-laf.jar!/laf.xml
jar:http://host/synth-laf.jar!/laf.xml
В то время как DTD для синтезатора определяется, синтаксический анализатор не проверяет. Парсинг перестанет работать, только если необходимый атрибут не определяется, или неправильного типа.
<!ELEMENT synth ((%beansPersistance;) | стиль | связать | шрифт | цвет | imagePainter | imageIcon | defaultsProperty)*> <!ATTLIST synth version CDATA #IMPLIED >
Определения атрибута
Элемент синтезатора содержит все другие элементы, которые составляют определение SynthLookAndFeel.
<!ELEMENT style (свойство | defaultsProperty | состояние | шрифт | graphicsUtils | вставки | живописец | imagePainter | непрозрачный | (%beansPersistance;) | imageIcon)*> <!ATTLIST style id ID #IMPLIED clone IDREF #IMPLIED >
Определения атрибута
Элемент стиля соответствует a SynthStyle
, с дочерними элементами, определяющими свойства, которые применяются ко всем состояниям или утверждают элементы, которые содержат свойства, определенные для определенного состояния. Следующий пример создает непрозрачный стиль с идентификатором button
, вставки 4, 4, 4, 4 и шрифт Диалогового окна 12.
<style id="button"> <opaque value="true"/> <insets top="4" left="4" right="4" bottom="4"/> <font name="Dialog" size="12"/> </style>
Следующий пример создает новый стиль с идентификатором clonedButton
это - копия стиля с идентификатором button
и имеет шрифт Диалогового окна, 14. Получающийся стиль будет непрозрачен, иметь вставки 4, 4, 4, 4 и шрифт Диалогового окна 14.
<style id="clonedButton" clone="button"> <font name="Dialog" size="14"/> </style>
<!ELEMENT state (цвет | шрифт | живописец | imagePainter | (%beansPersistance;) | свойство | imageIcon)*> <!ATTLIST state id ID #IMPLIED clone IDREF #IMPLIED value CDATA #IMPLIED idref IDREF #IMPLIED >
Определения атрибута
Элемент состояния определяет визуальные свойства, которые должны использоваться для определенного состояния компонента. Например, Вы могли определить цвет фона, когда Компонент включается, должен выглядеть по-другому чем цвет фона, когда компонент отключается. Не все Компоненты поддерживают все состояния. Например, a Panel
только поддерживает состояния, ВКЛЮЧЕННЫЕ и ОТКЛЮЧЕННЫЕ.
Следующий пример создает состояние с красным фоном, который будет использоваться, когда компонент будет в выбранное и нажатое состояние:
<state value="SELECTED AND PRESSED"> <color value="RED" type="BACKGROUND"/> </state>
Состояние с большинством отдельных соответствий будет выбрано. Например, следующее определяет два состояния:
<state value="SELECTED and PRESSED" id="one"> <color value="RED" type="BACKGROUND"/> </state> <state value="SELECTED" id="two"> <color value="RED" type="BACKGROUND"/> </state>
Государство one
используется, когда Компонент ВЫБИРАЕТСЯ и НАЖИМАЕТСЯ, и состояние two
когда Компонент ВЫБИРАЕТСЯ. Если состояние Компонента содержит, по крайней мере, ВЫБРАННЫЙ и НАЖАТЫЙ, состояние one
будет выбран, иначе если состояние будет ВЫБРАНО, но не не будет содержать НАЖАТЫЙ, состояние two
будет использоваться.
<!ELEMENT font EMPTY> <!ATTLIST font id ID #IMPLIED clone IDREF #IMPLIED name CDATA #IMPLIED style CDATA #IMPLIED size CDATA #IMPLIED >
Определения атрибута
Определяет шрифт для текущего состояния, или стиль. Следует определить или idref или имя и размер.
Следующий пример создает стиль со Шрифтом Диалогового окна 12 Полужирный.
<style id="test"> <font name="DIALOG" size="12" style="BOLD"/> </style>
Следующий пример создает стиль со шрифтом Диалогового окна 12 Полужирный, который будет использоваться, если компонент будет ВКЛЮЧЕН, иначе Диалоговое окно, то 12 Курсивов будут использоваться.
<style id="test"> <font name="DIALOG" size="12" style="ITALIC"/> <state value="ENABLED"> <font name="DIALOG" size="12" style="BOLD"/> </state> </style>
В то время как можно предоставить различный шрифт на состояние, в общих виджетах НЕ будет подтверждать, когда изменения состояния, так, чтобы можно было столкнуться с калибровкой проблем, если Вы пытаетесь использовать шрифт с существенно отличающимся размером для различных состояний.
<!ELEMENT color EMPTY> <!ATTLIST color id ID #IMPLIED idref IDREF #IMPLIED type CDATA #IMPLIED value CDATA #IMPLIED >
Определения атрибута
Color
класс, например RED
. #RRGGBB
где RR
дает красный компонент, GG
зеленый компонент и BB
синий компонент. Вы не должны определить все компоненты цвета. Например, #123
эквивалентно #000123
. #ARRGGBB
или #AARRGGBB
. Это полезно для альфа-значений кроме 0xFF
. Форма #ARRGGBB
эквивалентно #0ARRGGBB
. Цвет определяет цвет и какая часть Компонента ему нужно примениться к. Следующий пример будет использовать цвет фона КРАСНЫХ, когда компонент будет включен.
<state value="ENABLED"> <color value="RED" type="BACKGROUND"/> </state>
У следующего примера будет красный фон, когда Компонент будет включен, иначе синий.
<style id="test"> <state value="ENABLED"> <color value="RED" type="BACKGROUND"/> </state> <state> <color value="#00FF00" type="BACKGROUND"/> </state> </style>
<!ELEMENT property EMPTY> <!ATTLIST property key CDATA #REQUIRED type (idref|boolean|dimension|insets|integer|string) "idref" value CDATA #REQUIRED >
Определения атрибута
Элементы свойства используются, чтобы добавить пар значения ключа к a SynthStyle
к этому можно получить доступ посредством get
метод. Многие Component
s используют пар значения ключа для того, чтобы сконфигурировать их визуальное появление. Отошлите к таблице свойства для списка свойств каждого Component
поддерживает. Следующее создает свойства ScrollBar.allowsAbsolutePositioning
, OptionPane.minimumSize
, ScrollPane.viewportBorderInsets
, Tree.rowHeight
и foreground
с ложью значений, размерности 262x90, вставки 5, 5, 5, 5, целое число 20 и экземпляр класса ArrowButtonPainter.
<style id="test"> <property key="ScrollBar.allowsAbsolutePositioning" type="boolean" value="false"/> <property key="OptionPane.minimumSize" type="dimension" value="262 90"/> <property key="ScrollPane.viewportBorderInsets" type="insets" value="5 5 5 5"/> <property key="Tree.rowHeight" type="integer" value="20"/> <object class="ArrowButtonPainter" id="ArrowButtonPainter"/> <property key="foreground" type="idref" value="ArrowButtonPainter"/> </style>
Можно также определить свойства, которые должны примениться к определенным состояниям. Получают ли к свойству доступ для каждого состояния, зависит от того, как свойство используется. Например, следующее определяет значок по умолчанию и значок, чтобы использовать, в то время как мышь по компоненту.
<style id="test"> <imageIcon id="defaultIcon" path="resources/myImage.png"/> <property key="RadioButton.icon" value="defaultIcon"/> <state value="MOUSE_OVER"> <imageIcon id="mouseOverIcon" path="resources/myMouseOverImage.png"/> <property key="RadioButton.icon" value="mouseOverIcon"/> </state> </style>
<!ELEMENT defaultsProperty EMPTY> <!ATTLIST defaultsProperty key CDATA #REQUIRED type (idref|boolean|dimension|insets|integer|string) "idref" value CDATA #REQUIRED >
Определения атрибута
Элементы DefaultsProperty используются, чтобы определить свойства, которые будут помещены в UIDefaults
таблица это SynthLookAndFeel
предоставления к UIManager
. Следующее присваивает Цветную красноту значению Table.focusCellForeground.
<style id="test"> <object class="javax.swing.plaf.ColorUIResource" id="color"> <int>255</int> <int>0</int> <int>0</int> </object> <defaultsProperty key="Table.focusCellForeground" type="idref" value="color"/> </style>
Посредством этого значения можно было тогда спросить UIManager.get("Table.focusCellForeground")
.
<!ELEMENT graphicsUtils EMPTY> <!ATTLIST graphicsUtils idref IDREF #REQUIRED >
Определения атрибута
Элементы GraphicsUtils используются, чтобы определить SynthGraphicsUtils, который будет использовать текущий стиль. Следующий пример создает стиль с экземпляром CustomGraphicsUtils для SynthGraphicsUtils.
<style id="test"> <object class="CustomGraphicsUtils" id="graphics"/> <graphicsUtils idref="graphics"/> </style>
<!ELEMENT insets EMPTY> <!ATTLIST insets id ID #IMPLIED idref IDREF #IMPLIED top CDATA #IMPLIED bottom CDATA #IMPLIED left CDATA #IMPLIED right CDATA #IMPLIED >
Определения атрибута
Элементы вставок используются, чтобы определить Вставки для текущего стиля. Вставки будут установлены на любых Компонентах, с которыми связывается стиль. Следующий пример создает стиль со вставками 1, 2, 3, 0.
<style id="test"> <insets top="1" bottom="2" left="3"/> </style>
<!ELEMENT bind EMPTY> <!ATTLIST bind style IDREF #REQUIRED type (name|region) #REQUIRED key CDATA #REQUIRED >
Определения атрибута
Свяжите элементы, определяют, для каких Областей стиль должен использоваться. Следующий пример применяет тест стиля к любому Компоненту, имя которого запускается с test
.
<style id="test"> <insets top="1" bottom="2" left="3"/> </style> <bind style="test" type="name" key="test.*"/>
Многочисленные стили могут примениться к области, когда каждый из соответствующих стилей объединяется в получающийся стиль, который используется. Приоритет дается стилям, определенным позже в файле. Например, следующее определяет два стиля, a и b. Разработайте примененного к любому компоненту с именем, запускающимся с теста, и разработайте b, используется для областей кнопки.
<style id="a"> <font name="DIALOG" size="12" style="ITALIC"/> <insets top="1" bottom="2" left="3"/> </style> <bind style="a" type="name" key="test.*"/> <style id="b"> <font name="DIALOG" size="12" style="BOLD"/> </style> <bind style="b" type="region" key="button"/>
Поскольку кнопка с именем тестирует, это эквивалентно:
<style> <font name="DIALOG" size="12" style="BOLD"/> <insets top="1" bottom="2" left="3"/> </style>
Слияние происходит для состояний стиля также.
<style id="a"> <font name="DIALOG" size="12" style="ITALIC"/> <insets top="1" bottom="2" left="3"/> <state value="ENABLED"> <object id="customPainter" class="CustomPainter"/> <painter idref="customPainter"/> </state> </style> <bind style="a" type="name" key="test.*"/> <style id="b"> <font name="DIALOG" size="12" style="BOLD"/> <state value="ENABLED"> <font name="Lucida" size="12" style="ITALIC"/> </state> </style> <bind style="b" type="region" key="button"/>
Поскольку кнопка с именем тестирует, это эквивалентно:
<style> <font name="DIALOG" size="12" style="BOLD"/> <insets top="1" bottom="2" left="3"/> <state value="ENABLED"> <object id="customPainter" class="CustomPainter"/> <painter idref="customPainter"/> <font name="Lucida" size="12" style="ITALIC"/> </state> </style>
<!ELEMENT painter EMPTY> <!ATTLIST painter idref IDREF #IMPLIED method CDATA #IMPLIED direction (north|south|east|west|top|left|bottom|right|horizontal|vertical|horizontal_split|vertical_split) #IMPLIED >
Определения атрибута
Живописец определяет SynthPainter для текущего стиля или состояния текущего стиля. Следующий пример связывает экземпляр класса MyPainter
который должен быть a SynthPainter
к стилю test
.
<style id="test"> <object class="MyPainter" id="MyPainter"/> <painter idref="MyPainter"/> </style>
Живописец, который используется для определенного метода и состояния, определяется следующим образом:
Рассмотрите следующее:
<style id="test"> <painter idref="fallbackPainter"/> <painter idref="styleButtonBackgroundPainter" method="buttonBackground"/> <state value="SELECTED"> <painter idref="stateFallbackPainter"/> <painter idref="stateButtonBackgroundPainter" method="buttonBackground"/> </state> </style>
Следующие схемы, какой живописец будет использоваться для какой метод SynthPainter:
Государство | Метод | Живописец |
---|---|---|
ВЫБРАННЫЙ | paintButtonBackground | stateButtonBackgroundPainter |
ВЫБРАННЫЙ | Что-либо кроме paintButtonBackground | stateFallbackPainter |
Почти ВЫБРАННЫЙ | paintButtonBackground | styleButtonBackgroundPainter |
Почти ВЫБРАННЫЙ | Что-либо кроме paintButtonBackground | fallbackPainter |
Когда несколько идентичных живописцев объявляются, они агрегированы в единственный. Два живописца идентичны, если их направление и значения атрибутов метода равны. Рассмотрите следующее:
<style id="panelStyle"> <imagePainter method="panelBackground" path="red.png" /> <imagePainter method="panelBackground" path="green.png" /> <imagePainter method="panelBackground" path="blue.png" /> </style>
Эти три живописца идентичны, поскольку они используют тот же самый метод и то же самое направление (все направления по умолчанию). Синтезатор агрегировал этих живописцев, чтобы создать единственный, который нарисует его живописцев дочерних элементов в порядке объявления. Следовательно, Синтезатор сначала нарисует красное изображение, тогда зеленый и наконец синий. Каждый дочерний живописец может быть замечен как уровень совокупного живописца.
Агрегация живописца, или мультииерархическое представление, очень полезна для элементов повторного использования. Предположите, что Вы хотите использовать эффект выделения на кнопки и на выбранные пункты меню. С агрегацией живописца Вы только должны создать отдельного живописца выделения вместо того, чтобы иметь кнопки, и живописцы пунктов меню обрабатывают ее.
<!ELEMENT imagePainter EMPTY> <!ATTLIST imagePainter id ID #IMPLIED method CDATA #IMPLIED direction (north|south|east|west|top|left|bottom|right|horizontal|vertical|horizontal_split|vertical_split) #IMPLIED path CDATA #REQUIRED sourceInsets CDATA #IMPLIED destinationInsets CDATA #IMPLIED paintCenter (true|false) "true" stretch (true|false) "true" center (true|false) "false" >
Определения атрибута
Элемент ImagePainter определяет живописца для текущего стиля, или утвердите, что это представит использование указанного изображения. ImagePainter предлагает два отличных режима рендеринга. Первый режим используется, чтобы центрировать изображение в обеспеченном пространстве. Это обычно используется в рендеринге художественных оформлений сверху виджета, например, чтобы определить, что стрелка для кнопки прокрутки использует центральный режим. Следующий пример иллюстрирует это:
<style id="test"> <imagePainter path="resources/myImage.png" center="true"/> </style>
Второй режим используется в масштабировании изображения, чтобы поместиться в обеспеченное пространство. В этом режиме sourceInsets используется, чтобы определить границу вокруг изображения, где север, юг, восточные и западные края границы или расширяются или размещаются рядом (атрибут фрагмента), четыре угла границы, оттянутой на месте, и центр расширяется. В этом режиме следует определить sourceInsets. Следующий пример иллюстрирует ImagePainter, который использует изображение MyImage.png и вставки 2 полностью вокруг:
<style id="test"> <imagePainter path="resources/myImage.png" sourceInsets="2 2 2 2"/> </style>
Сошлитесь на описание элемента живописца для деталей относительно приоритета в выборе живописца и понять, как обрабатываются идентичные живописцы.
Определения атрибута
ImageIcon используется, чтобы присвоить реализацию Значка, которая обертывает Изображение к уникальному идентификатору. Это обычно используется для свойств, которые берут Значок. Следующий пример связывает ImageIcon со свойством RadioButton.icon.
<style id="test"> <imageIcon id="icon" path="resources/myImage.png"/> <property key="RadioButton.icon" value="icon"/> </style>
Определения атрибута
Непрозрачный элемент указывает, должны ли какие-либо Компоненты, с которыми связывается стиль, быть сделаны непрозрачными. Живописца попросят нарисовать независимо от непрозрачности связанного Компонента. Следующий пример создает стиль, который не непрозрачен.
<style id="test"> <opaque value="FALSE"> <painter idref="painter"/> </style>
Бобовое постоянство может использоваться, чтобы встроить любой Объект. Это обычно используется для того, чтобы встроить Ваших собственных Живописцев, но может использоваться для других объектов arbritrary также. Обратитесь к
В создании файла Синтезатора это - хорошая практика, чтобы создать отступающий стиль, который используется всеми компонентами. Это удостоверится, что у любых компонентов, которые не соответствуют определенный стиль, будут шрифт по умолчанию, передний план, фон и непрозрачность. Следующий пример иллюстрирует это:
<synth> <style id="backingStyle"> <opaque value="true"/> <font name="Dialog" size="12"/> <state> <color value="BLACK" type="BACKGROUND"/> <color value="WHITE" type="FOREGROUND"/> </state> </style> <bind style="backingStyle" type="region" key=".*"/> </synth>