2011-04-07 3 views
0

У меня есть стиль, определенный для JLabel:Swing Synth Skin: Можете ли вы переопределить стили?

<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"/> 

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

<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 на синтезаторе предполагает, что можно смешивать стили, применяемые к регионам и имен, и их значения будут объединены:

Вы можете привязать к индивидууму, названный компоненты, независимо от того, являются ли они также связанными как регионы. Например, предположим, что вы хотите, чтобы кнопки «ОК» и « « Отмена »в вашем графическом интерфейсе обработаны иначе, чем все остальные кнопки . Сначала вы дадите имена OK и Cancel, используя метод component_setName() . Затем вы определяете три стиля: один для кнопок (регион = «Кнопка»), один для кнопки «ОК» (имя = «ОК»), и один для кнопки «Отмена» (имя = «Отмена»)). Наконец, вы бы связать эти стили, как это:

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

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

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

Однако, не кажется, что определено в первом стиле может быть перекрытая с помощью определенного во втором стиле?

ответ

0

Я могу подтвердить, что невозможно переопределить ранее используемые привязанные типы (то есть вы не можете установить цвет типа = «ПРЕДПОСЫЛКА» на ключе региона, а затем установить другой тип = 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"/> 
Смежные вопросы