Swing Synth Skin: Можете ли вы переопределить стили? - PullRequest
0 голосов
/ 07 апреля 2011

У меня есть стиль, определенный для JLabel:

<style id="myLabel">
        <state>
          <opaque value="true"/>
          <color value="blue" type="BACKGROUND"/>
          <color value="red" type="FOREGROUND"/>
        </state>
      </style>
<bind style="myLabel" type="region" key="label"/> 

Однако я хочу, чтобы некоторые JLabels (в определенных JPanels) были оформлены совершенно по-разному:

<style id="myUnrelatedPanel">
        <state>
          <opaque value="true"/>
          <color value="green" type="BACKGROUND"/>
          <color value="yellow" type="FOREGROUND"/>
        </state>
      </style>
<bind style="myLabel" type="name" key="_valueOfMyPanel.getName()_in_here"/> 

Выше не работает, потому что стиль для JLabel применяется.

Стили вложения не работают. Компилятор не жалуется; Synth берет привязанный к региону стиль к метке и применяет его ко всем меткам в таблице стилей.

Следующая выдержка из ограниченной документации Java по Synth предполагает, что можно смешивать стили, применяемые к регионам и именам, и что их значения будут объединены:

Вы можете привязать к человеку, по имени компоненты, являются ли они или нет также связаны как регионы. Например, Предположим, вы хотите иметь «ОК» и Обработанные кнопки "Отмена" в вашем графическом интерфейсе иначе, чем все остальные кнопок. Во-первых, вы бы дали ОК и Отмена имен кнопок, используя Метод component.setName (). Затем вы будет определять три стиля: один для кнопки в целом (регион = «Кнопка»), одна для кнопки ОК (название = «ОК») и один для кнопки «Отмена» (name = «Отмена»). Наконец, вы бы свяжите эти стили следующим образом:

 <bind style="styleButton" type="region" key="Button"> 
 <bind style="styleOK" type="name" key="OK"> 
 <bind style="styleCancel" type="name" key="Cancel">

Когда компонент или область связаны с более одного стиля, стили слиты

Примечание: так же, как стиль может быть связан с несколько регионов или имен, несколько стили могут быть связаны с регионом или название. Эти несколько стилей объединены для региона или имени. Приоритет дано стилям, определенным позже в файл

Однако не похоже, что определенный в первом стиле может быть переопределен определенным во втором стиле?

1 Ответ

0 голосов
/ 08 апреля 2011

Я могу подтвердить, что невозможно переопределить ранее использовавшиеся привязанные типы (то есть, вы не можете установить цвет type = "BACKGROUND" для клавиши региона, а затем установить другой тип = "BACKGROUND"Цвет на именованном ключе. Установка другого типа, такого как TEXT_BACKGROUND, будет работать, поскольку Synth объединяет два стиля в один. Поскольку BACKGROUND был установлен в первом стиле, однако, вы не можете установить его снова во втором стиле.

Очень разочаровывает. Однако я нашел обходной путь. Установите набор цветов «по умолчанию» в стиле catch-all, key = ". *" И отклонитесь от этих цветов в стилях с привязкой к имени:

 <style id="backingStyle">
    <state>
        <opaque value="false"/>
        <font name="Arial" size="12"/>
        <color value="black" type="BACKGROUND"/>
        <color value="white" type="FOREGROUND"/>
    </state>
    </style>
    <bind style="backingStyle" type="region" key=".*"/>

и

 <style id="backingStyle">
    <state>
        <opaque value="false"/>
        <font name="Verdana" size="12"/>
        <color value="blue" type="BACKGROUND"/>
        <color value="green" type="FOREGROUND"/>
    </state>
    </style>
    <bind style="backingStyle" type="name" key="nameOfMyPanel"/>
...