FONDAMENTI DI INFORMATICA L-B - APPELLO DEL 26/03/2002

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.