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 lonnipresente 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 lelenco 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 lambiente 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 laggiornamento
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 lappletviewer 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:
Lapplet 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 dall1.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.
