1

そのため、Javaシンセを使用してカスタムLookAndFeelを作成しようとしていますが、カスタムボタンのバインドに問題があります。(終了ボタンの外観は異なります)。

これが私のシンセファイルのボタンです:

<!-- Button -->

<style id="buttonStyle">
    <property key="Button.textShiftOffset" type="integer" value="1"/>
    <insets top="2" left="2" right="2" bottom="2"/>
    <state>
        <color value="#000000" type="BACKGROUND"/>
        <imagePainter method="buttonBackground" path="/rstk/resources/pictures/parts/button.jpg" sourceInsets="2 2 2 2"/>   
    </state>
    <state value="PRESSED">
        <color value="#9BC3B1" type="BACKGROUND"/>
        <imagePainter method="buttonBackground" path="/rstk/resources/pictures/parts/button_p.jpg" sourceInsets="2 2 2 2"/>         
    </state>
     <state value="MOUSE_OVER">
        <color value="#9BC3B1" type="BACKGROUND"/>
        <imagePainter method="buttonBackground" path="/rstk/resources/pictures/parts/button_h.jpg" sourceInsets="2 2 2 2"/>         
    </state>
</style>
<bind style="buttonStyle" type="region" key="Button"/>


<!-- Exit Button -->

<style id="exitStyle">
    <property key="Button.textShiftOffset" type="integer" value="1"/>
    <insets top="1" left="1" right="1" bottom="1"/>
    <state>
        <imagePainter method="buttonBackground" path="/rstk/resources/pictures/parts/exit.jpg" sourceInsets="2 2 2 2"/> 
    </state>
    <state value="PRESSED">
        <color value="#9BC3B1" type="BACKGROUND"/>
        <imagePainter method="buttonBackground" path="/rstk/resources/pictures/parts/exit_p.jpg" sourceInsets="2 2 2 2"/>           
    </state>
    <state value="MOUSE_OVER">
        <color value="#9BC3B1" type="BACKGROUND"/>
        <imagePainter method="buttonBackground" path="/rstk/resources/pictures/parts/exit_h.jpg" sourceInsets="2 2 2 2"/>           
    </state>
</style>
<bind style="exitStyle" type="region" key="Exit"/>

ボタンを作成するコードは次のとおりです。

JButton exit = new JButton("Exit");
        exit.setName("exit");

通常のボタンスタイルを試してみたので、カスタムボタンだけになりましたが、うまくいきません。また、buttonStyleに何も含まないようにしてみましたが、うまくいきませんでした。全体的なスタイルを取得しただけです。

    <style id="backingStyle"> 
    <opaque value="TRUE"/>
    <font name="Dialog" size="11"/>
    <state>
      <color value="#2B271C" type="BACKGROUND"/>
      <color value="YELLOW" type="FOREGROUND"/>
    </state>
  </style>
  <bind style="backingStyle" type="region" key=".*"/>
4

2 に答える 2

2

あなたの問題は、出口と呼ばれる地域がないという事実によるものだと思います。すべてのリージョンは、javax.swing.plaf.synth.Regionクラスから取得する必要があります。APIは、そのリージョンへのバインドに何を使用するかを指示しますhttp://docs.oracle.com/javase/6/docs/api/javax/swing/plaf/synth/Region.html

しかし、標準のシンセサイザーで描画されたボタンとは異なる外観の特別なボタンが必要な場合は、「リージョン」ではなく「名前」にバインドするのが最も簡単な方法だと思います。JButtonを拡張する単純なクラスを作成します。ExitButtonという名前を付けることができます。メソッドをオーバーライドする必要もありません。XMLファイルは、スタイルをそのクラス名にバインドします。次に、そのスタイルボタンを使用する場合は常に、JButtonの代わりにExitButtonオブジェクトを作成します(同じように動作し、同じメソッドを持ちますが、XMLバインディングごとに異なって見えます)。

XMLファイルの場合、次のようにバインドします。

<!-- Exit Button -->

<style id="exitStyle">
  <property key="Button.textShiftOffset" type="integer" value="1"/>
  <insets top="1" left="1" right="1" bottom="1"/>
  <state>
    <imagePainter method="buttonBackground" path="/rstk/resources/pictures/parts/exit.jpg" sourceInsets="2 2 2 2"/> 
  </state>
  <state value="PRESSED">
    <color value="#9BC3B1" type="BACKGROUND"/>
    <imagePainter method="buttonBackground" path="/rstk/resources/pictures/parts/exit_p.jpg" sourceInsets="2 2 2 2"/>           
  </state>
  <state value="MOUSE_OVER">
    <color value="#9BC3B1" type="BACKGROUND"/>
    <imagePainter method="buttonBackground" path="/rstk/resources/pictures/parts/exit_h.jpg" sourceInsets="2 2 2 2"/>           
  </state>
</style>
<bind style="exitStyle" type="name" key="ExitButton"/>

唯一の違いはtype="nameとkey="ExitButton"(またはJButtonを拡張するクラスに名前を付けるために選択したもの)だけであることに注意してください。また、キーの値は、作成して使用したいクラスの名前と一致する必要があります。このスタイルのボタン。

お役に立てれば。

于 2012-06-11T21:42:24.547 に答える
1

名前付きコンポーネントにバインドする場合は、バインドタイプを「region」から「name」に変更する必要があります。キーは、コンポーネント「exit」に設定した名前と一致する必要があります(大文字のEはありません)。したがって、終了ボタンバインディングの行

<bind style="exitStyle" type="region" key="Exit"/>

する必要があります

<bind style="exitStyle" type="name" key="exit"/>

それはそれであるはずです!さらに問題が発生した場合は教えてください。

于 2011-07-28T21:55:54.487 に答える