E' data la classe BiCounter che implementa un contatore bidirezionale:
public class BiCounter
{
private int val;
public BiCounter() { val=0; }
public int getValue() { return val; }
public void reset() { val=0; }
public void inc() { val++; }
public void dec() { val--; }
public String toString() { return "Valore = "+val; }
}
ESERCIZIO 1
Viene riportata la definizione incompleta della classe principale di una semplice applicazione Java (non grafica). Lo scopo dell'applicazione è quello di utilizzare un'istanza della classe BiCounter per realizzare un semplice contatore interattivo: viene mostrato a video il valore del contatore e l'utente può digitare uno dei seguenti comandi seguito da un Invio:
Dopo ogni comando viene scritto a video il valore aggiornato del contatore e l'applicazione rimane in attesa di un nuovo comando fino a che non viene digitato il comando *
Come si può vedere dalla definizione della classe si fa uso di un'istanza di InputStremReader e di un'istanza di OutputStreamWriter che incapsulano gli stream forniti dalla classe System, in modo da gestire correttamente i caratteri.
L'esercizio consiste nel completare il metodo main() in modo da realizzare quanto sopra descritto.
import java.io.*;
public class Console1
{
public static void main(String[] args) throws IOException
{
char[] ch=new char[20];
ch[0]=' ';
BiCounter c=new BiCounter();
InputStreamReader tastiera = new InputStreamReader(System.in);
OutputStreamWriter video = new OutputStreamWriter(System.out);
...
}
}
ESERCIZIO 2
Realizzare un'applicazione grafica (con Swing) che apre una finestra in cui sono contenuti:
Utilizzando un'istanza di BiCounter il comportamento della finestra è il seguente:
Ad ogni pressione di bottone il textbox mostra il valore aggiornato del contatore.
La classe principale Swing1 è definita come segue:
import java.awt.*; import javax.swing.*; import java.awt.event.*;
public class Swing1
{
public static void main(String[] args)
{
JFrame frame = new JFrame("Esempio 1");
Container c = frame.getContentPane();
Swing1Panel p = new Swing1Panel();
c.add(p);
frame.setBounds(20,20,200,120);
frame.show();
}
}
La classe Swing1Panel è parzialmente definita come segue:
import java.awt.*; import javax.swing.*; import java.awt.event.*;
public class Swing1Panel extends JPanel implements ActionListener
{
private BiCounter c;
private JButton b1,b2,b3;
private JTextField txt1;
public Swing1Panel()
{
...
}
public void actionPerformed(ActionEvent e)
{
...
}
}
Si chiede di scrivere l'implementazione del costruttore di Swing1Panel e del metodo actionPerformed che fornisce la risposta all'evento di pressione dei tre bottoni.