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はスタイル領域を取得します-'label'に固定され、スタイルシート内のすべてのラベルに適用されます。

Synthに関する限定されたJavaドキュメントからの次の抜粋は、リージョンと名前に適用されるスタイルを混在させることが可能であり、それらの値がマージされることを示唆しています。

リージョンとしてバインドされているかどうかに関係なく、個々の名前付きコンポーネントにバインドできます。たとえば、GUIの[OK]ボタンと[キャンセル]ボタンを他のすべてのボタンとは異なる方法で処理したいとします。まず、component.setName()メソッドを使用して、[OK]ボタンと[キャンセル]ボタンに名前を付けます。次に、3つのスタイルを定義します。1つは一般的なボタン(region = "Button")、1つはOKボタン(name = "OK")、もう1つはキャンセルボタン(name = "Cancel")です。最後に、次のようにこれらのスタイルをバインドします。

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

コンポーネントまたはリージョンが複数のスタイルにバインドされている場合、スタイルはマージされます

注:スタイルを複数のリージョンまたは名前にバインドできるのと同様に、複数のスタイルをリージョンまたは名前にバインドできます。これらの複数のスタイルは、地域または名前に対してマージされます。ファイルの後半で定義されたスタイルが優先されます

ただし、最初のスタイルで定義されたものを2番目のスタイルで定義されたものでオーバーライドできるようには見えませんか?

4

1 に答える 1

0

以前に使用されたアンカータイプをオーバーライドできないことを確認できます(つまり、リージョンキーにtype = "BACKGROUND"の色を設定してから、別のtype="BACKGROUND"の色を設定することはできません。名前付きキー。Synthは2つのスタイルを1つにマージするため、TEXT_BACKGROUNDなどの別のタイプを設定すると機能します。ただし、BACKGROUNDは最初のスタイルで設定されているため、2番目のスタイルで再度設定することはできません。

期待はずれの。ただし、回避策を見つけました。キャッチオール、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-04-08T10:09:55.227 に答える