2011-04-07 47 views
0

我有一個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"/> 

不過,我想一定的JLabel(在某些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文檔以下摘錄表明,它可以混合應用到地區和名稱的風格,而且它們的值將被合併:

您可以綁定到個人,命名 組件,無論它們是否爲 也綁定爲區域。例如, 假設您想讓「處理」 中的「取消」按鈕的「確定」和 按鈕與所有其他 按鈕不同。首先,您將使用 component.setName()方法提供OK 和取消按鈕名稱。然後, 將定義三種樣式:一種用於一般用於 按鈕(區域= 「按鈕」),一個用於OK按鈕(名稱 =「OK」),另一個用於取消按鈕(名稱=「取消」 )。最後,你會 綁定這些樣式是這樣的:

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

當組件或區域勢必 不止一個風格,樣式 合併

注:正如樣式可以綁定到 多個區域或名稱,多個 樣式可以綁定到某個區域或 名稱。對於區域或名稱,這些多種樣式合併爲 。優先被 給後面的 文件中定義

但是樣式,它不會出現在第一樣式定義的可以通過在第二樣式定義來overrided?

回答

0

我可以確認無法覆蓋以前使用的錨定類型(也就是說,您不能在區域鍵上設置type =「BACKGROUND」顏色,然後設置不同的type =「背景顏色在一個已命名的按鍵上,設置一個不同的類型,比如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"/>