Conversione tra unità di misura mediante scelta con casella combinata
organizzazione del programma
Questo programma impiega le tre classi:
esempio

classe Gestore Finestra
Ridefinisce il metodo onClosing per consentire di chiudere la finestra con il pulsante X sulla barra del titolo. Non ha campi (proprietà) e non ha il costruttore.

1 import java.io.*;
2 import java.awt.*;
3 import java.awt.event.*;
4 class GestoreFinestra implements WindowListener {
5     public void windowIconified(WindowEvent e) {}
6     public void windowDeiconified(WindowEvent e){}
7     public void windowActivated(WindowEvent e){}
8     public void windowDeactivated(WindowEvent e){}
9     public void windowOpened(WindowEvent e){}
10     public void windowClosed(WindowEvent e){}
11    public void windowClosing(WindowEvent e){
12         System.exit(0);
13    }
14 }


La classe Cnv
Posiziona i componenti su un pannello ed inserisce il pannello in una finestra.

Contiene il gestore dell'evento "Pulsante Premuto".

Consente di scegliere da una casella combinata le unità di misura a cui si vuole applicare la conversione.

In un file di nome Cnv.java inserire anche le direttive seguenti:

1import java.awt.*;
2import java.awt.event.*;

Poi scrivere la dichiarazione per la classe:

3public class Cnv extends Frame implements ActionListener, ItemListener {

La classe Cnv eredita le proprietà e i metodi dalla classe Frame quindi il programma verrà eseguito in una finestra.

La classe ridefinisce i gestori (ActionListener e ItemListener) degli eventi generati dal pulsante e dalla casella combinata.

Proprietà della classe

4    double coeff, zero;
5     int scelta;
6    private Panel p = new Panel();
7    private Choice cb = new Choice();
8    private Label um1 = new Label("");
9    private Label um2 = new Label("");
10    private TextField DaUM = new TextField(5);
11    private Label aUM= new Label(“”);
12    private Button daCaF = new Button("Converti");

Commenti
Nella linea 4 si dichiarano due variabili ti tipo double, la prima, coeff, rappresenta il coefficiente di conversione da una unità di misura ad un'altra, la seconda, zero, serve a contenere un eventuale traslazione dell'inizio della scala (come ad esempio da °C a °F)

Nella linea 5 si dichiara una variabile intera, scelta, che viene usata per memorizzare la conversione scelta.

Nelle linee da 6 a 12 si dichiarano proprietà private, cioè accessibili solo tramite i metodi della classe, Ognuna delle quali è il riferimento ad un componente, creato dinamicamente, con l'operatore new.

Si tenga presenta che il testo "Converti" che compare sul pulsante creato nella riga 12 è usato dal programma di gestione dell'evento per riconoscere il tasto che è stato premuto.

il Costruttore

13  public Cnv(){
14     addWindowListener(new GestoreFinestra());
15    daCaF.addActionListener(this);
16    cb.addItemListener(this);
17    vociComboBox();
18    p.setLayout(null);
19    p.add(cb);
20    p.add(um1);
21    p.add(DaUM);
22    p.add(um2);
23     p.add(aUM);
24    p.add(daCaF);
25    cb.setBounds(10,10,100,20);
26    um1.setBounds(10,35,100,15);
27    DaUM.setBounds(10,50,100,20);
28    um2.setBounds(150,35,100,15);
29    aUM.setBounds(150,50,100,20);
30    daCaF.setBounds(80,100,80,20);
31    add(p);
32  }

Commenti
Il Costruttore è una funzione che si riconosce perchè ha lo stesso nome della classe. Il Costruttore ha lo scopo di inizializzare le proprietà della classe.

Linea 14: Si crea (new) un'istanza della classe GestoreFinestra che rappresenta la destinataria dei messaggi generati dagli eventi che si verificano sulla Finestra.

Linea 15: il pulsante (daCaF) invia i messaggi generati dall'evento "onClick" al gestore che si trova in questa (this) stessa classe.

Linea 16: la casella combinata (cb) invia i messaggi generati dall'evento "l'elemento scelto è cambiato" al gestore che si trova in questa (this) stessa classe.

Linea 17: viene richiamato il metodo "vociComboBox()" che ha lo scopo di aggiungere le varie righe che compariranno quando si apre la casella a discesa.

Linea 18: si elimina il layout associato per default al pannello, in modo che i componenti verranno posizionati esplicitamente.

Linea 19: si aggiunge la casella combinata al pannello.

Linee 20÷24: si aggiungono i componenti al pannello.

Linee 25÷30: si posizionano i componenti sul pannello.

Linee 31: si aggiunge il pannello alla finestra.

Metodi della classe: vociComboBox()

32   private void vociComboBox() {
33     cb.add("scegli U.M.");
34    cb.add("°C -> °F");
35    cb.add("m3 -> litri");
36    cb.add("joule -> Calorie");
37    cb.add("pollici -> cm");
38    cb.add("libbre->grammi");
39  }

Commenti
Si richiama il metodo add del componente Combo Box per scrivere le voci che dovranno apparire quando si apre la casella a discesa.

il gestore di evento

40  public void itemStateChanged(ItemEvent e) {
41    int i;
42    if (e.getStateChange()==ItemEvent.SELECTED) {
43      i = cb.getSelectedIndex();
44      switch(i) {
45        case 1:
46          coeff = 180.0/100.0;
47          zero = 32.0;
48          um1.setText("Gradi Centigradi");
49          um2.setText("Gradi Fahrenheit");
50          break;
51        case 2:
52          coeff = 1000.0;
53          zero = 0.0;
54          um1.setText("Metri Cubi");
55          um2.setText("Litri");
56          break;
57        case 3:
58          coeff = 0.2389;
59          zero = 0.0;
60          um1.setText("Joule");
41          um2.setText("Calorie");
62          break;
63        case 4:
64          coeff = 2.54;
65          zero = 0.0;
66          um1.setText("Pollici");
67          um2.setText("centimetri");
68          break;
69        case 5:
70          coeff = 453.6;
71          zero = 0.0;
72          um1.setText("Libbre");
73          um2.setText("grammi");
74          break;
75      }
76    }
77  }

Commenti


Linea :

Linea 15:

Linea 16:

Linea 17:

Linea 18:

Linea 19:

Linee 20÷24:

Linee 25÷30:

Linee 31:

il gestore di evento richiamato dal pulsante

78  public void actionPerformed(ActionEvent e) {
79    String bottone = e.getActionCommand();
80    double umDa, umA;
81      if (bottone.equals("Converti")) {
82      try {
83        String numeroLetto = daUm.getText();
84          umDa = Double.valueOf(numeroLetto).doubleValue();
85          umA = zero + umDa*coeff;
86          aUm.setText(""+umA);
87          }
88          catch(Exception exc) {
89         daUm.setText("usare . per separare i decimali");
90          aUm.setText("");
91        }
92      }
93    }
94  }

Commenti


Linea :

La classe principale

95  public class ConvertitoreUM {
96    public static void main(String argv[]) {
97    Cnv f = new Cnv();
98    f.setSize(280,180);
99    f.setLocation(10,100);
100    f.setVisible(true);
101    }
102  }

Commenti


Linea :