2012-09-16

Ultimate Swing, Teil 23

Ist Ihnen aufgefallen, dass ich im XML-File meines Look and Feels den Link auf den zugehörigen Artikel in den Java Tutorials versteckt habe? Das Dateiformat hat eine eigene Beschreibung. Mein Tipp: übernehmen Sie diesen Pfad in Ihre XML-Datei, dann müssen Sie nie lange suchen.

Wenn Sie sich meine Beispiel-Datei aus dem letzten Post ansehen, stellen Sie fest, dass die meiste Arbeit innerhalb von <style />-Elementen gemacht wird. Dann gibt es noch das Element <bind />. Beide sind in <synth /> eingebettet. Wie Sie bereits wissen, unterteilt Synth Komponenten in Regionen. Das Aussehen wird auf Java-Ebene durch SynthStyles festgelegt. Diese finden ihre Entsprechung in im Element <style /> der XML-Datei. Mit <bind /> sagen Sie dem Look and Feel, auf welche Region sich eine Stildefinition beziehen soll. Fehlt eine solche Bindung, wird die entsprechende Region nicht dargestellt. Deshalb ist es bewährte Praxis, einen Basis-Stil an JEDE Region zu binden. Hier zur Erinnerung ein Ausschnitt aus meiner Beispiel-Datei:

<!-- Default-Style -->
<style id="backingStyle">
  <opaque value="TRUE" />
  <font name="Verdana" size="16"/>
  <state>
    <color type="BACKGROUND" value="#f8f8f8" />
    <color type="FOREGROUND" value="#ffa000" />
  </state>
</style>
<bind style="backingStyle" type="region" key=".*" />
Java2html

Auf diese Weise erhält eine Region zumindest Informationen zu Vorder- und Hintergrundfarbe sowie Schriftart und –größe. In meinem Beispiel profitieren Eingabe- und Ankreuzfelder davon – sie wurden (noch) nicht explizit deklariert.

Wenn Sie LAFTester starten und mit der Maus über eine der beiden Schaltflächen fahren, verändert sich ihre Farbe. Warum das so ist, wird deutlich, wenn wir uns nochmals den korrespondierenden Stil ansehen:

<style id="buttonStyle">
  <opaque value="TRUE" />
  <insets top="10" left="10" bottom="10" right="10" />
  <state>
    <color type="FOREGROUND" value="WHITE" />
    <color type="BACKGROUND" value="#808080" />
  </state>
  <state value="PRESSED">
    <color type="BACKGROUND" value="BLACK" />
  </state>
  <state value="MOUSE_OVER">
    <color type="BACKGROUND" value="#505050" />
  </state>
  <state value="DISABLED">
    <color type="BACKGROUND" value="#b0b0b0" />
  </state>
</style>
Java2html

Mit dem <state />-Element können Sie das Aussehen von Regionen für bestimmte Zustände definieren. Um auszuprobieren, wie sich beispielsweise das Deaktivieren einer Schaltfläche auswirkt, können Sie im Quelltext der Klasse LAFTester folgendes Fragment einfügen:

p1.getComponents()[0].setEnabled(false);
Java2html

Screenshot: deaktivierte Schaltfläche

Weitere Informationen über Zustände finden Sie im Tutorial-Artikel sowie der Dateibeschreibung.

No comments:

Post a Comment