#java #swing #synth
#java #swing #синтезатор
Вопрос:
У меня есть стиль, определенный для 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 выбирает стиль, привязанный к области ‘label’, и применяет его ко всем меткам в таблице стилей.
Следующая выдержка из ограниченной документации Java по Synth предполагает, что можно смешивать стили, применяемые к регионам и именам, и что их значения будут объединены:
Вы можете привязываться к отдельным именованным компонентам, независимо от того, привязаны они также как регионы или нет. Например, предположим, вы хотите, чтобы кнопки «OK» и «Отмена» в вашем графическом интерфейсе обрабатывались иначе, чем все остальные кнопки. Сначала вы должны присвоить кнопкам OK и Cancel имена, используя метод component.setName(). Затем вы должны определить три стиля: один для кнопок в целом (region = «Button»), один для кнопки OK (name = «OK») и один для кнопки Cancel (name = «Отмена»). Наконец, вы бы связали эти стили следующим образом:
<bind style="styleButton" type="region" key="Button">
<bind style="styleOK" type="name" key="OK">
<bind style="styleCancel" type="name" key="Cancel">
Когда компонент или область привязаны к
более одного стиля, стили
объединенныйПримечание: Точно так же, как стиль может быть привязан к нескольким регионам или именам, несколько стилей могут быть привязаны к региону или имени. Эти несколько стилей объединяются для региона или названия. Приоритет отдается стилям, определенным позже в файле
Однако не похоже, что a, определенное в первом стиле, может быть переопределено a, определенным во втором стиле?
Ответ №1:
Я могу подтвердить, что невозможно переопределить ранее используемые привязанные типы (то есть вы не можете установить цвет type = «BACKGROUND» для региональной клавиши, а затем установить другой цвет type = «BACKGROUND» для именованной клавиши. Установка другого типа, такого как TEXT_BACKGROUND, будет работать, поскольку Synth объединяет два стиля в один. Однако, поскольку фон был установлен в первом стиле, вы не можете установить его снова во втором стиле.
Очень разочаровывает. Однако я нашел обходной путь. Установите набор цветов по умолчанию в универсальном стиле 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"/>