Output grafico: stringhe

Negli esempi precedenti la visualizzazione della data è stata ottenuta usando il metodo System.out.println(String str) della classe System. Questo metodo è il più immediato ma non il più elegante ed è utile soprattutto nella fase di progettazipne di un'applicazione per controllare il valore di una variabile man mano che viene calcolato. È sicuramente preferibile presentare il risultato di una applicazione direttamente sullo schermo confezionandone la visualizzazione nella forma più aggraziata possibile.

A questo scopo Java dispone di risorse precompilate contenute nei suoi pacchetti che il programmatore può importare e usare per i suoi scopi. Per migliorare l'aspetto dell'output conviene usare alcune di un importante gruppo di classi Java, cioè i componenti grafici e in particolare frame, container e panel.

I componenti sono risorse visuali, capaci cioè di generare sagome rettangolari sullo schermo del monitor, destinati a contenere o altri componenti (i contenitori) o testo o immagini. I componenti sono implementati nella classe Component e nelle sue derivate.

Uno dei componenti di uso più generale è JFrame. Questa classe è dotata di un contenitore predefinito, il suo ContentPane che può essere ottenuto con il metodo public Container getContentPane(). Altri contenitori da inserire in un frame vanno in effetti inseriti nel suo ContentPane tramite il metodo public Component add(Component comp).

Ogni componente è dotato di varie proprietà che possono essere assegnate con opportuni metodi. Se ne ricordano alcuni, quelli di uso più frequente.

In un contenitore possono essere immessi altri componenti con il metodo
public Component add(Component comp).

Riguardo alla disposizione che gli oggetti immessi assumono nel contenitore (Layout) va notato che raramente il programmatore la stabilisce in modo rigido, indicando, ad esempio, ascissa e coordinata della posizione del componente immesso. Il più delle volte il programmatore stabilisce la 'topologia' della disposizione, lasciando a Java il compito di stabilire i particolari a seconda delle dimensioni del contenitore e dei contenuti.

Altri utili metodi nella confezione dell'aspetto di un contenitore possono essere i seguenti.

Questi due metodi, nell'esempio, sono usati da componenti di classe JPanel derivata da JComponent. JPanel implementa la rappresentazione di un pannello rettangolare. Il tipo di contorno dei pannelli è specificato da un'interfaccia Border creata dal metodo statico public static Border createRaisedBevelBorder() della classe BorderFactory.

Dentro ai pannelli si inseriscono degli oggetti di classe JLabel cioè oggetti capaci di rappresentare in modo graficamente modulato stringhe di caratteri.

In definitiva la sequenza di preparazione dell'applicazione è la seguente.

 


Provare il seguente esempio.

import java.awt.*;
import javax.swing.*;
import java.util.GregorianCalendar;     //si importa la classe GregorianCalendar del package util
public class Data extends JFrame { static String[] nome_giorno = // array statico di stringhe: gli elementi sono fissi {"","Domenica","Lunedì","Martedì","Mercoledì", "Giovedì","Venerdì","Sabato"}; static String[] nome_mese = {"Gennaio","Febbraio","Marzo","Aprile", "Maggio","Giugno","Luglio","Agosto","Settembre", "Ottobre", "Novembre","Dicembre"}; public Data() { setSize(400,100); setLocation(100,100); GregorianCalendar oggi = new GregorianCalendar(); int ix_gm = oggi.get(GregorianCalendar.DAY_OF_MONTH); int ix_gs = oggi.get(GregorianCalendar.DAY_OF_WEEK); int ix_mese = oggi.get(GregorianCalendar.MONTH); int anno = oggi.get(GregorianCalendar.YEAR); String data = "Oggi: "+nome_giorno[ix_gs]+" "+ix_gm+" "+nome_mese[ix_mese]+" "+anno; JPanel pannello = new JPanel(); pannello.setBorder(BorderFactory.createRaisedBevelBorder()); pannello.setBackground(Color.green); Font font = new Font("Verdana",Font.BOLD,16); JLabel testo = new JLabel(data); testo.setFont(font); testo.setForeground(Color.red); pannello.add(testo); add(pannello); } public static void main(String[] args) { Data d = new Data(); d.setVisible(true); } }

Si dovrebbe ottenere un output simile a

fig01.gif