Как я могу реализовать пользовательский стиль кнопки синтезатора Java, если у меня уже есть стиль кнопки? - PullRequest
1 голос
/ 10 апреля 2011

Итак, я пытаюсь создать пользовательский LookAndFeel с помощью java synth, и у меня возникают проблемы с привязкой пользовательской кнопки.(Кнопка выхода выглядит по-другому).

Вот кнопки из моего синтезаторного файла:

<!-- 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=".*"/>

Ответы [ 2 ]

2 голосов
/ 12 июня 2012

Я полагаю, что ваша проблема связана с тем, что ни один регион не называется Выходом.Все регионы должны быть из класса javax.swing.plaf.synth.Region.API скажет вам, что использовать для привязки к этому региону http://docs.oracle.com/javase/6/docs/api/javax/swing/plaf/synth/Region.html

Но если вы хотите иметь специальную кнопку, которая выглядит иначе, чем ваша стандартная кнопка рисования синтезатора, я считаю, что самый простой способ - это привязать к "название "не" регион ".Создайте простой класс, расширяющий JButton.Вы можете назвать это ExitButton.Вам даже не нужно переопределять какие-либо методы.Затем XML-файл будет привязывать стиль к этому имени класса.Затем всякий раз, когда вы захотите использовать эту кнопку стиля, создайте объект ExitButton вместо JButton (хотя он будет действовать одинаково и иметь одинаковые методы, он будет выглядеть по-разному для привязки 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 and key =" ExitButton "(или как вы ни назовете свой класс, который расширяет JButton). Также значениеключ должен соответствовать названию класса, который вы создали и хотите использовать для этого стиля кнопки.

Надеюсь, это поможет.

1 голос
/ 29 июля 2011

Когда вы связываетесь с именованным компонентом, вам нужно изменить тип связывания с «регион» на «имя», и ключ должен совпадать с именем, которое вы установили в компоненте «выход» (без заглавной буквы E).Так что ваша строка для привязки кнопки выхода

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

должна быть

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

Так и должно быть!Скажите, если у вас возникнут какие-либо проблемы.

...