Un esempio funzionante è disponibile qui.

/*             <applet code="blocchi" width="525" height="500"></applet>
 *
 * +-------------------------------------------------------------------+
 * |                                                                   |
 * | BLOCCHI - Sistema di calcolo secondo il Metodo Zona.              |
 * |                                                                   |
 * | Copyright (c) 2004 Flavio "Iron Bishop" Pastore.                  |
 * |                    http://ironbishop.altervista.org               |
 * |                                                                   |
 * | Questo programma è Software Libero rilasciato sotto licenza       |
 * | GNU General Public License versione 2 o successiva.               |
 * |                                                                   |
 * +-------------------------------------------------------------------+
 *
 */

import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.io.*;
import java.net.*;

public class blocchi extends Applet implements ItemListener {

	// variabili
	objDonna ancheVal[], addomeVal[], altezzaVal[];
	float vipoVal[], pesoVal[], massaMagraTotale, massaGrassaTotale;
	int risultatiVal[][];
	final Color grigio = new Color(128,128,128);
	final Color verde = new Color(198,226,130);
	static final String TABDONNA = "tabDonna.db";
	static final String TABUOMO = "tabUomo.db";
	
	// oggetti
	Button calcMM = new Button("Calcola massa magra"),
		calcBG = new Button("Calcola blocchi giornalieri");

	Label lab_feed = new Label(""),
		lab_gender = new Label("Calcolo per:"),
		lab_indiceAtt = new Label("Indice attività:"),
		lab_polso = new Label("Polso: "),
		lab_addome = new Label("Addome:"),
		lab_ombelico = new Label("Anche:"),
		lab_peso = new Label("Peso:"),
		lab_massamagra = new Label("Massa magra:"),
		lab_altezza = new Label("Altezza:"),
		lab_blocchi = new Label("Blocchi Giornalieri:");

	TextField polso = new TextField(5),
		addome = new TextField(5),
		ombelico = new TextField(5),
		peso = new TextField(5),
		massamagra = new TextField(5),
		altezza = new TextField(5),
		blocchi = new TextField(5);

	Choice gender = new Choice(),
		indiceAtt = new Choice();

	ActionListener buttonHandler, genderHandler;

	public void init() {

		setBackground(verde);
		setForeground(Color.black);
		
		// inizializza elenchi
		gender.add("uomo");
		gender.add("donna");
				
		for (int i = 0; i < 12; i++)
			indiceAtt.add(("" + (1.1 + i*0.1)).substring(0,3));

		// inizializza tabelle donna/uomo
	
		try {
				
				URL url = new URL(getCodeBase(), TABDONNA);
				ObjectInputStream s1 = new ObjectInputStream(url.openStream());
		    	ancheVal = (objDonna[])s1.readObject();
		    	addomeVal = (objDonna[])s1.readObject();
		    	altezzaVal = (objDonna[])s1.readObject();
		    	s1.close();

				URL url2 = new URL(getCodeBase(), TABUOMO);
		    	ObjectInputStream s2 = new ObjectInputStream(url2.openStream());
		    	vipoVal = (float[])s2.readObject();
		    	pesoVal = (float[])s2.readObject();
		    	risultatiVal = (int[][])s2.readObject();
		    	s2.close();
		    	
		    	lab_feed.setText("");
	
		} catch (Throwable t) {
			lab_feed.setText("Errore irreversibile durante la lettura del database.");
		}

		//setta i campi come per calcolo uomo
		lab_addome.setForeground(grigio);
		lab_altezza.setForeground(grigio);
		addome.setEditable(false);
		altezza.setEditable(false);
		
		// gestori di eventi
		
		buttonHandler = new ActionListener() {
			public void actionPerformed(ActionEvent e) { // gestisce calcolo
		    	Object source = e.getSource();
				massaGrassaTotale = 0f;
				massaMagraTotale = 0f;
				
				if (source == calcMM) {
					if (gender.getSelectedIndex() == 0) {
						//calcola uomo
						try {
							float tempVipo = Float.parseFloat(ombelico.getText().replaceAll(",", ".")) - Float.parseFloat(polso.getText().replaceAll(",", "."));
							float tempPeso = Float.parseFloat(peso.getText().replaceAll(",", "."));
							boolean error = false;
							
							if ((tempVipo < 56) || (tempVipo > 127)) {
								error = true;
								lab_feed.setText("Errore: la misura \"anche\" è fuori dai limiti impostati.");
								massamagra.setText("");
								blocchi.setText("");
							}
		
							if ((tempPeso < 54.5) || (tempPeso > 136.1)) {
								error = true;
								lab_feed.setText("Errore: la misura \"peso\" è fuori dai limiti impostati.");
								massamagra.setText("");
								blocchi.setText("");
							}
		
							if (!error) {
								int i, j;
								for (i = 0; (i < vipoVal.length) && (tempVipo > vipoVal[i]); i++) ;
								for (j = 0; (j < pesoVal.length) && (tempPeso > pesoVal[j]); j++) ;

								float ris = (100 - risultatiVal[j][i-1]) * tempPeso / 100;
								massamagra.setText("" + (Math.floor(ris * 10)/10));
								
								lab_feed.setText("");
							}
		
						} catch (NumberFormatException NFEg) {
							lab_feed.setText("Errore: dato non numerico.");
							massamagra.setText("");
							blocchi.setText("");
							
						} catch (Throwable t) {
							lab_feed.setText("Errore nei dati.");
						}
						
					} else {
						//calcola donna
						try {
							float tempAnche = Float.parseFloat(ombelico.getText().replaceAll(",", "."));
							float tempAddome = Float.parseFloat(addome.getText().replaceAll(",", "."));
							float tempAltezza = Float.parseFloat(altezza.getText().replaceAll(",", "."));
							float tempPeso = Float.parseFloat(peso.getText().replaceAll(",", "."));
							
							int i;
							boolean error = false;
							
							if (tempAnche < 76.3 || tempAnche > 152.4) {
								error = true;
								lab_feed.setText("Errore: la misura \"anche\" è fuori dai limiti impostati.");
								massamagra.setText("");
								blocchi.setText("");
							}
							
							if (tempAddome < 50.9 || tempAddome > 127.0) {
								error = true;
								lab_feed.setText("Errore: la misura \"addome\" è fuori dai limiti impostati.");
								massamagra.setText("");
								blocchi.setText("");
							}
							
							if (tempAltezza < 76.3 || tempAnche > 152.4) {
								error = true;
								lab_feed.setText("Errore: la misura \"altezza\" è fuori dai limiti impostati.");
								massamagra.setText("");
								blocchi.setText("");
							}

		
							if (!error) {
								for (i = 0; (i < ancheVal.length) && (tempAnche > ancheVal[i].cm); i++) ;
								massaGrassaTotale += ancheVal[i-1].costante;
		
		
								for (i = 0; (i < addomeVal.length) && (tempAddome > addomeVal[i].cm); i++) ;
								massaGrassaTotale += addomeVal[i-1].costante;
								
								for (i = 0; (i < altezzaVal.length) && (tempAltezza > altezzaVal[i].cm); i++) ;
								massaGrassaTotale -= altezzaVal[i-1].costante;
								
								float ris = (100 - massaGrassaTotale) * tempPeso / 100;
								massamagra.setText("" + (Math.floor(ris * 10)/10));
								
								lab_feed.setText("");
							}
						} catch (NumberFormatException NFEf) {
							lab_feed.setText("Errore: dato non numerico.");
							massamagra.setText("");
							blocchi.setText("");
							
						} catch (Throwable t) {
							lab_feed.setText("Errore nei dati.");
						}
		
					}
				} else if (source == calcBG) {
					//calcola blocchi giornalieri
					try {
						blocchi.setText("" + Math.round(Float.parseFloat(massamagra.getText()) * Float.parseFloat(indiceAtt.getSelectedItem().toString()) / 7));
					} catch (NumberFormatException NFEe) {
						lab_feed.setText("Errore: dato non numerico.");
						massamagra.setText("");
						blocchi.setText("");					
					}
				}
			}
		};
		
		// attiva gestori di eventi		
		calcMM.addActionListener(buttonHandler);
		calcBG.addActionListener(buttonHandler);

		gender.addItemListener(this);

		// posiziona gli oggetti
	
	    setLayout(null);
	
		lab_gender.setBounds(10,10,100,20);
		gender.setBounds(110,10,100,20);
		
		lab_polso.setBounds(10,50,50,20);
		polso.setBounds(70,50,50,20);
		
		lab_addome.setBounds(130,80,70,20);
		addome.setBounds(200,80,50,20);
		lab_ombelico.setBounds(10,80,70,20);
		ombelico.setBounds(70,80,50,20);
		
		lab_peso.setBounds(10,110,50,20);
		peso.setBounds(70,110,50,20);
		
		lab_altezza.setBounds(130,110,70,20);
		altezza.setBounds(200,110,50,20);
		
		calcMM.setBounds(40,150,200,30);
		
		lab_massamagra.setBounds(50,190,100,20);
		massamagra.setBounds(180,190,50,20);
		
		lab_indiceAtt.setBounds(310,10,100,20);
		indiceAtt.setBounds(410,10,60,20);
		
		calcBG.setBounds(300,50,200,30);
		
		lab_blocchi.setBounds(300,90,120,20);
		blocchi.setBounds(430,90,50,20);
		
		lab_feed.setBounds(10,230,500,20);	

		// disegna gli oggetti
				
		add(gender);
		add(lab_gender);
		add(polso);
		add(lab_polso);
		add(lab_indiceAtt);
		add(indiceAtt);
		add(addome);
		add(lab_addome);
		add(ombelico);
		add(lab_ombelico);
		add(peso);
		add(lab_peso);
		add(calcMM);
		add(massamagra);
		add(lab_massamagra);
		add(altezza);
		add(lab_altezza);
		add(calcBG);
		add(blocchi);
		add(lab_blocchi);
		add(lab_feed);
	}	

	public void itemStateChanged(ItemEvent e) { // gestisce cambio calcolo uomo/donna
	
		if (gender.getSelectedIndex() == 0) {
			lab_addome.setForeground(grigio);
			lab_altezza.setForeground(grigio);
			addome.setEditable(false);
			altezza.setEditable(false);

			lab_polso.setForeground(Color.black);
			polso.setEditable(true);
		} else {
			lab_addome.setForeground(Color.black);
			lab_altezza.setForeground(Color.black);
			addome.setEditable(true);
			altezza.setEditable(true);
	
			lab_polso.setForeground(grigio);
			polso.setEditable(false);
		}
	
	}
	
}
 

Voci correlate modifica