/** FILE: intrfaccia.java **/ import SIMULA.simulator; import java.awt.*; import java.io.*; /* * CLASS interfaccia * * finestra dove settare i parametri, cliccando sul pulsante "Lancia il Simulatore": * 1) controlla l'attendibilita e la correttezza dei dati (i messaggi di errore --> sul terminale) * 2) lanciathread di tipo simulator uno alla volta (aspetta finche uno è in esecuzione * per lanciare il successivo) e si nasconde fino a quando la simulazione è finita * --> vedi package SIMULA - simulator.java */ class interfaccia extends Frame { /* * COSTRUTTORE * * imposta la posizione e l'ordine degli oggetti(awt) nella finestra */ interfaccia(char c) { et_titolo = new Label("Scelta politica"); et_toll = new Label("Tolleranza: "); et_toll2 = new Label("Tolleranza: "); et_alpha = new Label("Fattore Alpha: "); et_file = new Label("File da aprire: "); et_beta = new Label("Fattore Beta: "); aster = new Label("/ NON SERVE /"); cl0 = new CardLayout(); poli = new Choice(); toll = new TextField("10", 11); alpha = new TextField("", 11); file = new TextField("", 11); beta = new TextField("", 11); ok = new Button(" Lancia il Simulatore "); annulla = new Button(" Annulla "); cards = new Panel(); mia = new Panel(); altre = new Panel(); alphapan = new Panel(); pulsanti = new Panel(); politica = new Panel(); testfile = new Panel(); betapan = new Panel(); filepuls = new Panel(); entro = true; setTitle("Impostare il simulatore"); cards.setLayout(cl0); politica.add(et_titolo); politica.add(poli); mia.add(et_toll); mia.add(toll); altre.add(et_toll2); altre.add(aster); switch(c) { case 49: // '1' poli.addItem("Anarchica"); poli.addItem("F.I.F.O."); poli.addItem("Personalizzata"); cards.add("mia", mia); cards.add("altre", altre); break; case 50: // '2' poli.addItem("F.I.F.O."); poli.addItem("Personalizzata"); poli.addItem("Anarchica"); cards.add("mia", mia); cards.add("altre", altre); break; case 51: // '3' poli.addItem("Personalizzata"); poli.addItem("Anarchica"); poli.addItem("F.I.F.O."); cards.add("altre", altre); cards.add("mia", mia); break; } testfile.add(et_file); testfile.add(file); pulsanti.add(annulla); pulsanti.add(ok); alphapan.add(et_alpha); alphapan.add(alpha); betapan.add(et_beta); betapan.add(beta); filepuls.add(politica); filepuls.add(cards); filepuls.add(testfile); filepuls.add(alphapan); filepuls.add(betapan); filepuls.add(pulsanti); add(filepuls); resize(260, 300); cl0.show(cards, "altre"); show(); } /* * COSTRUTTORE(2) * * imposta i valori nei campi di testo */ interfaccia(float f, int i, String s, char c, boolean flag, int ripeti) { this(c); this.ripeti = ripeti; nograp = flag; alpha.setText(String.valueOf(f)); beta.setText(String.valueOf(i)); file.setText(String.valueOf(s)); } /* * METDO paint() * * imposta la posizione e le dimenzioni della finesta */ public void paint(Graphics g) { if(entro) { setBounds(385, 140, 260, 300); entro = false; } } /* * METODO handleEvent() --> RIDEFINIZIONE * * viene chiamato dal run-time di java ogni volta che si verifica un evento in questa finestra * gestisce la finestra, anche il pulsante "lancia il simulatore". Se questo viene premuto * controlla l'attendibilita e la correttezza dei dati nei campi di testo mettendo tutto tra un * blocco try/catch. se non si verificano errori viene lanciato un thread simulator. * --> vedi package SIMULA - simulator.java */ public boolean handleEvent(Event event) { if(event.id == 201) // premuta la X in alto a destra, QUIT System.exit(0); if(event.target == poli) // gestione della visualizzazione del campo di testo per la tolleranza if(poli.getSelectedItem() == "Personalizzata") cl0.show(cards, "mia"); else cl0.show(cards, "altre"); if(event.target == annulla && event.id == 1001) // se viene premuto il pulsante annulla, QUIT System.exit(0); if(event.target == ok && event.id == 1001) // se viene prenuto il pulsante "lancia il simulatore" try { hide(); float f = (new Float(alpha.getText())).floatValue(); int i = Integer.parseInt(toll.getText()); int j = Integer.parseInt(beta.getText()); boolean flag = poli.getSelectedItem() != "Anarchica"; if(f <= 1.0F) { System.out.println("Il Fattore alpha deve essere maggiore di 1.0"); show(); } else if(i < 1) { System.out.println("La tolleranza non deve essere minore di 1"); show(); } else if(j < 1 || j > 1000) { System.out.println("Il Fattore beta deve essere compreso tra 1 e 1000"); show(); } else { for(int k = 0; k < ripeti; k++) { if(poli.getSelectedItem() == "Personalizzata") simo = new simulator(i, f, j, new FileInputStream(file.getText()), file.getText(), nograp); else simo = new simulator(flag, f, j, new FileInputStream(file.getText()), file.getText(), nograp); if(simo != null) { simo.start(); // lancia il simulatore --> vedi package SIMULA - simulator.java simo.join(); // aspetta che il simulatore termini simo = null; System.gc(); // avvia il garbage-collection di java per la liberazione della memoria inutilizzata } } show(); } } catch(FileNotFoundException _ex) // non esiste il file { System.out.println("Non trovo il File."); show(); } catch(NumberFormatException _ex) // è stato inserito male un valore nei campi di testo { System.out.println("Il Formato di un Numero e\' Errato (alpha/tempo/tolleranza)"); show(); } catch(IOException _ex) // errore nell'apertura del file { System.out.println("Eccezione I/O"); show(); } catch(InterruptedException _ex) // se si verifica una interruzione { System.out.println("Interruzione"); show(); } return super.handleEvent(event); } /* * VARIABILI e OGGETTI * */ Label et_titolo; Label et_toll; Label et_toll2; Label et_alpha; Label et_file; Label et_beta; Label aster; CardLayout cl0; Choice poli; TextField toll; TextField alpha; TextField file; TextField beta; Button ok; Button annulla; Panel cards; Panel mia; Panel altre; Panel alphapan; Panel pulsanti; Panel politica; Panel testfile; Panel betapan; Panel filepuls; boolean entro; boolean nograp; simulator simo; int ripeti; }