【问题标题】:Swing Synth Skin: Can you override Styles?Swing Synth 皮肤:你能覆盖样式吗?
【发布时间】:2011-04-07 16:20:49
【问题描述】:

我为 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(在某些 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 选取锚定到 'label' 的样式区域并将其应用于样式表中的所有标签。

以下来自 Synth 的有限 Java 文档的摘录表明,可以混合应用于区域和名称的样式,并且它们的值将被合并:

您可以绑定到个人,命名 组件,无论它们是否 也绑定为区域。例如, 假设您想要“确定”并且 处理过的 GUI 中的“取消”按钮 与其他所有不同 纽扣。首先,你会给 OK 和取消按钮名称,使用 component.setName() 方法。那么你 将定义三种样式:一种用于 一般按钮(区域 = “按钮”),一个用于确定按钮(名称 =“确定”),一个用于取消按钮(名称=“取消”)。最后,你会 像这样绑定这些样式:

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

当一个组件或区域被绑定到 不止一种风格,风格是 合并

注意:就像样式可以绑定到 多个地区或名称,多个 样式可以绑定到一个区域或 姓名。这多种风格合并 为地区或名称。优先级是 赋予后面定义的样式 文件

但是,第一个样式中定义的 a 似乎不能被第二个样式中定义的覆盖?

【问题讨论】:

    标签: java swing synth


    【解决方案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"/>
    

    【讨论】:

      猜你喜欢
      • 2011-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-09
      • 2018-07-07
      • 1970-01-01
      相关资源
      最近更新 更多