FONDAMENTI DI INFORMATICA L-B - APPELLO DEL 27/03/2003

E' data la classe Cellulare che implementa un telefono cellulare:

public class Cellulare
{
  private String display;
  private boolean calling;

  public Cellulare()
  {
    display = "";
    calling = false;
  }

  public String getDisplay()
  {
    return display;
  }

  public boolean isCalling()
  {
    return calling;
  }

  public void addDigit(int n)
  {
    display = display + n;
  }

  public void canc()
  {
    if (display.length() > 0)
     display = display.substring(0,display.length()-1);
  }

  public void call()
  {
    display = "Chiamata in corso";
    calling = true;
  }

  public void hang()
  {
    display = "";
    calling = false;
  }
}

ESERCIZIO

L'esercizio consiste nella realizzazione di  un'applicazione grafica (con Swing) che simula un telefono cellulare.

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,150,220);
    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 Cellulare c;
  private JTextField display;
  private JButton inizio, fine, canc, cifre[];

  public Swing1Panel()
  {
    ...
    abilitaTasti();
  }

  public void actionPerformed(ActionEvent e)
  {

    ...    
    abilitaTasti();
  }

  public void abilitaTasti()
  {
    ...
  }
}

Parte 1  - Creazione del pannello

Scrivere l'implementazione del costruttore di Swing1Panel in modo da creare una finestra come quella riportata qui di seguito

La finestra contiene:
  • Un display largo 12 caratteri (JTextField non editabile)
  • Un tasto I di inizio chiamata (JButton)
  • Un tasto F di fine chiamata (JButton)
  • Un tasto C che cancella l'ultima cifra immessa (JButton)
  • 10 tasti con le cifre disposti come riportato nell'immagine qui di lato (array di JButton)
    Attenzione, come in tutti i cellulari  lo zero è in fondo, tenetene conto nel decidere l'ordine in cui vengono fatti gli add() dei tasti nel pannello.

Attenzione

E' obbigatorio utilizzare le variabili riportate nell'implementazione della classe Swing1Panel e cioè

private Cellulare c;
private JTextField display;
private JButton inizio, fine, canc, cifre[];

Attenzione: la creazione e la gestione dei tasti cifre deve essere realizzata utilizzando dei cicli for, sono considerate scorrette le soluzioni che creano e gestiscono i tasti delle cifre senza l'utilizzo di cicli

L'ultima istruzione del costruttore sarà l'invocazione del metodo abilitaTasti() che gestisce la,logica descritta nella terza parte dell'esercizio.

Parte 2 - Gestione tasti

Scrivere l'implementazione del metodo actionPerformed che fornisce la risposta all'evento di pressione dei vari bottoni in modo da realizzare la logica di funzionamento descritta qui di seguito:

Utilizzando un'istanza di Cellulare il comportamento della finestra è il seguente (tra parentesi vengono suggeriti i metodi della classe Cellulare da utilizzare per ogni operazione):

Ad ogni pressione di bottone il Display mostra il valore aggiornato utilizzando il metodo getDisplay() della classe cellulare

L'ultima istruzione del costruttore sarà l'invocazione del metodo abilitaTasti() che gestisce la,logica descritta nella terza parte dell'esercizio.

Attenzione: la gestione dei tasti cifre deve essere realizzata utilizzando dei cicli for, sono considerate scorrette le soluzioni che gestiscono i tasti delle cifre senza l'utilizzo di cicli

Parte 3 - Gestione abilitazione tasti

Scrivere l'implementazione del metodo abilitaTasti() che gestisce la logica di disabilitazione dei tasti secondo regola riportate qui di seguito.

Si ricorda che l'abilitazione e la disabilitazione di un bottone si ottiene invocando il metodo setEnabled(true) (o setEnabled(false) ) della classe JButton.

Attenzione: la gestione dei tasti cifre deve essere realizzata utilizzando dei cicli for, sono considerate scorrette le soluzioni che gestiscono i tasti delle cifre senza l'utilizzo di cicli