MokaByte Numero 09 - Giugno 1997
di
Maurizio Boscaini 
Estendere la AWT
 

 



Con la versione 1.1 del JDK sono state introdotte numerose classi, che vanno ad accrescere le funzionalità dell’AWT (Abstract Window Toolkit), in cui sono raccolte le classi per la gestione dei componenti della GUI (Graphics User Interface) del sistema



Delle nuove classi presenti nel package java.awt analizzeremo ora la classe SystemColor
La classe SystemColor estende la classe Color per rappresentare i colori di sistema della GUI, su piattaforme come Windows95, Solaris/CDE, che forniscono uno schema dei colori del desktop. SystemColor è una classe final, che non può, cioè, essere ulteriormente estesa. Essa ridefinisce i metodi getRGB() e l’onnipresente toString(), ed aggiunge numerori campi final static (costanti di classe), per rappresentare appunto i colori degli oggetti della GUI. Tra questi oggetti troveremo, così, il colore di sfondo del desktop, lo sfondo dei menu, il colore del bordo delle finestre, etc... Questi colori simbolici sono creati automaticamente memorizzati in java.awt.SystemColor. Riporto di seguito l’elenco completo dei 26 colori di sistema, presente nella documentazione: desktop Background color of desktop activeCaption Background color for captions activeCaptionText Text color for captions activeCaptionBorder Border color for caption text inactiveCaption Background color for inactive captions inactiveCaptionText Text color for inactive captions inactiveCaptionBorder Border color for inactive captions window Background for windows windowBorder Color of window border frame windowText Text color inside windows menu Background for menus menuText Text color for menus text background color for text textText text color for text textHighlight background color for highlighted text textHighlightText text color for highlighted text control Background color for controls controlText Text color for controls controlLtHighlight Light highlight color for controls controlHighlight Highlight color for controls controlShadow Shadow color for controls controlDkShadow Dark shadow color for controls inactiveControlText Text color for inactive controls scrollbar Background color for scrollbars info Background color for spot-help text infoText Text color for spot-help text
 
 
 

Utilizzando questi colori è possibile costruire nuovi oggetti grafici, che mantengano la consistenza visuale con l’ambiente grafico di sistema. Non tutte le piattaforme supportano colori distinti per ciascun nome simbolico. Nel caso un colore simbolico non sia supportato, esso viene mappato nel colore più appropriato di default. Con alcuni sistemi, che supportano l’aggiornamento dinamico dei colori di sistema, è possibile cambiare un colore di sistema e vederne la variazione "on the fly". Altre piattaforme, come Windows95, invece tale variazione è possibile vederla solo al successivo lancio del programma java, che ne fa utilizzo, poiché i colori di sistema sono inizializzati ed aggiornati al caricamento del toolkit.
 

 

import java.awt.*;

import java.applet.*;



           



          public class ShowSystemColor extends Applet {          



          ü

          * init()

          */



          public void init() {

                  int numOfColor = 26;

                  setLayout(new GridLayout(numOfColor,3));

                  showColor(SystemColor.desktop, "desktop");

                  showColor(SystemColor.activeCaption, "activeCaption");

                  showColor(SystemColor.activeCaptionText, "activeCaptionText");

                  showColor(SystemColor.activeCaptionBorder, "activeCaptionBorder");

                  showColor(SystemColor.inactiveCaption, "inactiveCaption");

                  showColor(SystemColor.inactiveCaption, "Þ inactiveCaptionText");

                  showColor(SystemColor.inactiveCaption, "inactiveCaptionBorder");

                  showColor(SystemColor.window, "window");

                  showColor(SystemColor.windowBorder, "windowBorder");

                  showColor(SystemColor.windowText, "windowText");

                  showColor(SystemColor.menu, "menu");

                  showColor(SystemColor.menuText, "menuText");

                  showColor(SystemColor.text, "text");

                  showColor(SystemColor.textText, "textText");

                  showColor(SystemColor.textHighlight, "textHighlight");

                  showColor(SystemColor.textHighlightText, "textHighlightText");

                  showColor(SystemColor.textInactiveText, " textInactiveText");

                  showColor(SystemColor.control, "control");

                  showColor(SystemColor.controlText, "controlText");

                  showColor(SystemColor.controlHighlight, "controlHighlight");

                  showColor(SystemColor.controlLtHighlight, "controlLtHighlight");

                  showColor(SystemColor.controlShadow, " controlShadow");

                  showColor(SystemColor.controlDkShadow, "controlDkShadow");

                  showColor(SystemColor.scrollbar, "scrollbar");

                  showColor(SystemColor.info, "info");

                  showColor(SystemColor.infoText, "infoText");  

                  setSize(440,540);        

          } // END init()



           



           



          ü

          * showColor()

          */



          public void showColor(Color color, String str) {

                  TextArea ta = new TextArea(str,1,16,TextArea.SCROLLBARS_NONE);

                  Label l = new Label(str);

                  Button b = new Button(color.toString());

                  ta.setBackground(color);

                  ta.setForeground(new Color(~(color.getRGB())));

                  add(ta);

                  l.setBackground(color);

                  l.setForeground(new Color(~(color.getRGB())));

                  add(l);

         

                  b.setBackground(color);

                  b.setForeground(new Color(~(color.getRGB())));

                  add(b);

          }// END showColor()



           



           



         }// END class ShowSystemColor





Dopo averlo compilato (con il JDK1.1), per lanciarlo è sufficiente usare l’appletviewer con il seguente file ShowSystemColor.html:
        <HTML>

             <HEAD>

                   <TITLE> Mostra i colori di sistema </TITLE>

             <HEAD>

             <BODY>

                   <APPLET CODE="ShowSystemColor.class" WIDTH=440 HEIGHT=580>

             </APPLET > 

             </BODY>

        </HTML>
 
 
Il risultato su una piattaforma Windows95 è il seguente:

 

L’applet visualizza i colori variando lo sfondo di tre Component: TextArea, Label e Button, attraverso la funzione showColor() alla quale vengono passati il colore di sfondo per i vari component e il loro nome o il loro indice nello schema dei colori di sistema, che viene visualizzato nel colore complementare, in senso logico, del colore dello sfondo. Questo ci permette di osservare la possibilità, introdotta dall’1.1, di cambiare il colore di fondo di un
Button. Inoltre, si nota come il JDK, almeno la versione per Windows95, presenti un bug per quanto riguarda i colori di sistema dei TextArea, che non riflettono quelli reali (speriamo che la cosa venga messa a posto presto). Lo stesso problema si presenta con un altro TextComponent quale il TextField. Fatemi sapere se sulle altre piattaforme si presenta lo stesso problema.

 
Maurizio Boscaini è laureato in Ingegneria Elettronica presso l'Università di Padova, dove ha discusso la tesi "Visita virtuale al Museo di Storia Naturale". Lavora come tecnico all'Università di Verona, collabora allo sviluppo di applicazioni in Java presso Netsy di Caldogno (VI) e si interessa di HTML, Java, JavaScript, Visual Basic, C/C++. Scrive, inoltre, articoli sui temi della solidarietà e della pace per il settimanale Verona Fedele e il quotidiano l'Arena.

 
  

 

MokaByte rivista web su Java

MokaByte ricerca nuovi collaboratori
Chi volesse mettersi in contatto con noi può farlo scrivendo a mokainfo@mokabyte.it