Spec-Zone .ru
спецификации, руководства, описания, API
|
В уроке, названном Пример GroupLayout, GroupLayout
использовался, чтобы создать диалоговое окно поиска под названием, "Находят". Программа, которая создала диалоговое окно, Find.java
, используемый перекрестная платформа ("Металл") стиль с "Океанской" темой:
Этот урок создает то же самое диалоговое окно с Синтезатором, используя внешний XML-файл. Вот перечисление
файл.SynthDialog.java
SynthDialog.java
точно то же самое как Find.java
за исключением initLookAndFeel()
метод, который был изменен, чтобы использовать стиль Синтезатора с внешним вызванным файлом synthDemo.xml
. Вот новое initLookAndFeel()
метод:
private static void initLookAndFeel() { SynthLookAndFeel lookAndFeel = new SynthLookAndFeel(); // SynthLookAndFeel load() method throws a checked exception // (java.text.ParseException) so it must be handled try { lookAndFeel.load(SynthDialog.class.getResourceAsStream("synthDemo.xml"), SynthDialog.class); UIManager.setLookAndFeel(lookAndFeel); } catch (ParseException e) { System.err.println("Couldn't get specified look and feel (" + lookAndFeel + "), for some reason."); System.err.println("Using the default look and feel."); e.printStackTrace(); } }
XML-файл, synthDemo.xml
, начинается со стиля, связанного со всеми областями. Это - хорошая практика, чтобы сделать это, чтобы гарантировать, что области без стиля, связанного с ними, будут содержать что-то. Этот стиль заставляет все области нарисовать свой фон в непрозрачном цвете. Это также устанавливает шрифт значения по умолчанию и цвета по умолчанию.
<!-- Style that all regions will use --> <style id="backingStyle"> <!-- Make all the regions opaque--> <opaque value="TRUE"/> <font name="Dialog" size="14"/> <state> <color value="#D8D987" type="BACKGROUND"/> <color value="RED" type="FOREGROUND"/> </state> </style> <bind style="backingStyle" type="region" key=".*"/>
1. Цветные определения должны быть в <состояние> элемент. Это разрешает изменять цвета в зависимости от состояния. <Состояние> элемент в backingStyle
не имеет никаких атрибутов и поэтому применяется ко всем областям, независимо от их состояния. Если у области есть другие состояния, состояния объединяются с приоритетом, данным определениям состояния, которые появляются позже в файле.
2. Определение шрифта не в <состояние> элемент, потому что шрифт не должен измениться, когда есть изменение состояния (много компонентов измеряются в зависимости от их шрифта, и изменение в шрифте могло заставить компоненты изменяться в размере неумышленно).
Следующее <стиль>, который определенный элемент для текстового поля, которое красится, используя изображение.
<style id="textfield"> <insets top="4" left="6" bottom="4" right="6"/> <state> <font name="Verdana" size="14"/> <color value="#D2DFF2" type="BACKGROUND"/> <color value="#000000" type="TEXT_FOREGROUND"/> </state> <imagePainter method="textFieldBorder" path="images/textfield.png" sourceInsets="4 6 4 6" paintCenter="false"/> </style> <bind style="textfield" type="region" key="TextField"/>
1. Шрифт и цветные определения переопределяют определения в backingStyle
.
2. insets
и sourceInsets
даются те же самые значения, который является только совпадением, потому что они не связаны друг с другом.
3. ЦВЕТ ФОНА, #D2DFF2, является бледно-синим цветом — тот же самый цвет как фон в изображении, textfield.png
.
4. paintCenter
false
так, чтобы можно было видеть цвет фона.
Следующее <стиль>, который элемент для кнопок, которые красятся различными изображениями, в зависимости от состояния кнопки. Когда мышь передает по кнопке, ее изменениям появления. То, когда по этому щелкают (НАЖАЛО) изменения изображения снова.
<style id="button"> <!-- Shift the text one pixel when pressed --> <property key="Button.textShiftOffset" type="integer" value="1"/> <!-- set size of buttons --> <insets top="15" left="20" bottom="15" right="20"/> <state> <imagePainter method="buttonBackground" path="images/button.png" sourceInsets="10 10 10 10" /> <font name="Dialog" size="16"/> <color type="TEXT_FOREGROUND" value="#FFFFFF"/> </state> <state value="PRESSED"> <imagePainter method="buttonBackground" path="images/button_press.png" sourceInsets="10 10 10 10" /> </state> <state value="MOUSE_OVER"> <imagePainter method="buttonBackground" path="images/button_over.png" sourceInsets="10 10 10 10" /> </state> </style> <bind style="button" type="region" key="Button"/>
1. Шрифт и цветные определения в <состояние> элемент без атрибутов применяются ко всем состояниям кнопки. Это - то, потому что определения всех состояний, которые применяются (и <состояние> элемент без атрибутов является одним из них) объединятся, и нет никакого другого шрифта и красит определения, которые могли бы иметь приоритет.
2. sourceInsets
значения являются достаточно большими, что кривые углы изображения кнопки не будут расширены.
3. Порядок PRESSED
и MOUSE_OVER
состояния важны. Так как мышь всегда будет по кнопке, когда это будет нажато, оба состояния применятся к нажатой кнопке и первому определенному состоянию (PRESSED
) будет применяться. Когда мышь по кнопке, но это не нажимается, только MOUSE_OVER
состояние применяется. Если порядок PRESSED
и MOUSE_OVER
состояния инвертируются, PRESSED
изображение состояния никогда не будет использоваться.
Следующее <стиль>, который элемент для флажков, которые красятся различными значками, в зависимости от состояния флажка.
<style id="checkbox"> <imageIcon id="check_off" path="images/checkbox_off.png"/> <imageIcon id="check_on" path="images/checkbox_on.png"/> <property key="CheckBox.icon" value="check_off"/> <state value="SELECTED"> <property key="CheckBox.icon" value="check_on"/> </state> </style> <bind style="checkbox" type="region" key="Checkbox"/>
1. Следует использовать <imageIcon> элемент, чтобы определить любые значки, которые будут использоваться.
2. <Вставки> элемент и sourceInsets
атрибут не используется со значками, потому что они представляются в их фиксированном размере и не расширяются.
3. Значок, используемый, чтобы представить флажок, является значком, названным в CheckBox.icon
свойство. (см. javax/swing/plaf/synth/doc-files/componentProperties.html
), который является значком с идентификатором = "check_off", если состояние флажка не SELECTED
.
synthDemo.xml
файл создается из стилей, представленных выше, обернутый в <синтезатор> </синтезатор> теги. Можно открыть завершенный файл, щелкая
.synthDemo.xml
Нажмите кнопку Launch, чтобы работать, пример SynthDialog, используя Сеть Java™ Запускаются (