PDA

View Full Version : [java] aiuto per applet


ZuMBi
13-01-2007, 10:11
devo scrivere un'applet java per un esame, ma sono del tutto ignorante in materia.
il programma consiste in un semplice convertitore di unità di misura.
un "choice" (choice 1) permette la selezione della grandezza fisica da convertire mentre altre due "scelte" (choice 2, choice 3) sono per la definizione delle unità di misura, di partenza e di arrivo (es: massa, da g a kg)
ora, il mio problema è: come faccio a fare in modo che ogni volta che si sceglie una grandezza in choice 1, in choice 2 e choice 3 siano selezionabili solamente le unità di misura riferite a quella particolare grandezza?(es: massa, g,kg,t,mg,...)
grazia a chiunque abbia voglia di darmi una mano.

andbin
13-01-2007, 12:17
devo scrivere un'applet java per un esame, ma sono del tutto ignorante in materia.
il programma consiste in un semplice convertitore di unità di misura.
un "choice" (choice 1) permette la selezione della grandezza fisica da convertire mentre altre due "scelte" (choice 2, choice 3) sono per la definizione delle unità di misura, di partenza e di arrivo (es: massa, da g a kg)
ora, il mio problema è: come faccio a fare in modo che ogni volta che si sceglie una grandezza in choice 1, in choice 2 e choice 3 siano selezionabili solamente le unità di misura riferite a quella particolare grandezza?(es: massa, g,kg,t,mg,...)
grazia a chiunque abbia voglia di darmi una mano.Suppongo che tu stia usando Swing come interfaccia utente. Quindi usi dei JComboBox. Devi innanzitutto associare al tuo choice1 un ActionListener per fare qualcosa quando un elemento viene selezionato. Poi a quel punto, dovresti cambiare la lista di elementi negli altri due JComboBox. Ti conviene usare un ComboBoxModel.

Leggi (se non l'hai già fatto) <qui> (http://java.sun.com/docs/books/tutorial/uiswing/components/combobox.html) il tutorial sulle combobox.

ZuMBi
13-01-2007, 12:43
grazie innanzitutto.
purtroppo non ho la più pallida di idea di cosa sia swing.
perdona la mia ignoranza...

andbin
13-01-2007, 14:09
grazie innanzitutto.
purtroppo non ho la più pallida di idea di cosa sia swing.
perdona la mia ignoranza...Prova la applet in allegato che ho appena fatto. Compila il sorgente (javac TestComboApplet.java) e poi apri con un browser il file html (il browser deve supportare le applet, ovviamente).
Con la combo-box in alto puoi scegliere tra 2 liste di colori. Scegliendone una, la combo-box in basso viene aggiornata con la rispettiva lista.
Ovviamente è solo un semplice e banale esempio ma può esserti utile come spunto per realizzare la tua applet.

ZuMBi
13-01-2007, 18:07
nel caso volessi sostituire l'istruzione if con una switch come dovrei fare?
ci ho provato ma mi da errore e non riesco a capire dove sbaglio. :muro:

andbin
13-01-2007, 18:19
nel caso volessi sostituire l'istruzione if con una switch come dovrei fare?
ci ho provato ma mi da errore e non riesco a capire dove sbaglio. :muro:switch (idx)
{
case 0:
comboColori.setModel (comboModel1);
break;
case 1:
comboColori.setModel (comboModel2);
break;
}

ZuMBi
13-01-2007, 19:18
ok, ci siamo quasi.
ancora un problemino.
in pratica choice2 e choice3 non sono indipendenti.
se seleziono un'unità di misura in choice2 cambia anche quella in choice3 così non riesco a selezionare due unità di misura differenti.
mi spiego?

andbin
13-01-2007, 19:28
ok, ci siamo quasi.
ancora un problemino.
in pratica choice2 e choice3 non sono indipendenti.
se seleziono un'unità di misura in choice2 cambia anche quella in choice3 così non riesco a selezionare due unità di misura differenti.
mi spiego?Sì ... perché un ComboBoxModel mantiene l'informazione sull'elemento selezionato. Basta che crei 2 istanze del model che contengono la stessa lista di elementi.
Non ho tempo adesso di provare ... ma dovrebbe essere così.

ZuMBi
13-01-2007, 20:34
risolto...

ZuMBi
15-01-2007, 20:58
ennesimo problema.
fatti i dovuti calcoli, tramite un pulsante il risultato finale dovrebbe comparire nel campo testo in fondo all'applet.
il problema è che non riesco a gestire in maniera corretta il click sul bottone; a dire il vero non so proprio come comportarmi.
ho fatto un tentativo ma non funziona o meglio, il pulsante fa il suo lavoro, ma smette di funzionare la combobox.
dove sbaglio?

allego il listato per maggiore chiarezza.

andbin
15-01-2007, 22:08
ennesimo problema.
fatti i dovuti calcoli, tramite un pulsante il risultato finale dovrebbe comparire nel campo testo in fondo all'applet.
il problema è che non riesco a gestire in maniera corretta il click sul bottone; a dire il vero non so proprio come comportarmi.
ho fatto un tentativo ma non funziona o meglio, il pulsante fa il suo lavoro, ma smette di funzionare la combobox.
dove sbaglio?Ci sono alcune cose che non vanno:

(A)
Hai scritto: double i=Double.valueOf(valuet.getText()).doubleValue();
Non è sbagliato ma si può fare in modo più semplice con:
double i = Double.parseDouble (valuet.getText());

Però dovresti mettere un try-catch per catturare l'eccezione NumberFormatException. Se la stringa è vuota o non contiene numeri in formato valido viene lanciata questa eccezione. Inoltre questa conversione adesso la fai in qualunque caso, perché è all'inizio del metodo actionPerformed e non va molto bene così.

Quindi dovresti: 1) prendere la stringa dal campo di testo; 2) trimmare la stringa (togliere gli spazi ai lati con trim()); 3) verificare se la stringa risultante è vuota o no; 4) se non è vuota, fare la conversione nel try-catch e se c'è l'eccezione puoi ad esempio mostrare una box a video. Se la stringa invece è vuota o hai un errore, potresti cancellare il risultato.
Tutto questo però dovresti farlo solo se il 'source' è il pulsante che attiva la conversione.

(B)
Hai messo: else if(idx==2);
Il punto e virgola non ci va, così hai fatto una istruzione "vuota" come corpo del if.

ZuMBi
15-01-2007, 22:33
grazie per i consigli anche se alcune cose mi risultano ostiche da afferrare.
purtroppo però, la combobox continua a non funzionare; se invece elimino le ultime righe di codice relative al pulsante ecco che per magia tutto funziona.
why?! :confused:
perdona la mia ignoranza...

ZuMBi
15-01-2007, 22:37
ok, ci sono.
tutto a posto...per ora.
grazie ancora.

ZuMBi
15-01-2007, 23:16
3) verificare se la stringa risultante è vuota o no

come?

andbin
16-01-2007, 09:23
come?String strValue = valuet.getText().trim();

if (strValue.length() != 0)
{
// ... fai la conversione ...
}Il test si può anche fare: if (!strValue.equals(""))

ZuMBi
16-01-2007, 19:57
String strValue = valuet.getText().trim();

if (strValue.length() != 0)
{
// ... fai la conversione ...
}Il test si può anche fare: if (!strValue.equals(""))
il punto esclamativo cosa indica?

andbin
17-01-2007, 09:27
il punto esclamativo cosa indica?La negazione: se strValue non è uguale a "".

ZuMBi
26-01-2007, 00:25
rieccomi...
domanda: le istruzioni per la conversione dei numeri devo metterle "dentro" il try, prima del try o dopo il catch?
non riesco a venirne fuori, mi sono arenato e non capisco dove sbaglio! :muro:

ZuMBi
27-01-2007, 13:15
uP!

andbin
27-01-2007, 14:03
domanda: le istruzioni per la conversione dei numeri devo metterle "dentro" il try, prima del try o dopo il catch?La conversione della stringa in un numero va ovviamente messa dentro un blocco try-catch, in quanto può lanciare l'eccezione NumberFormatException.

ZuMBi
28-01-2007, 12:19
se hai tempo di darci un'occhiata te ne sarei davvero grato.
non ti sapaventare però, sarà zeppo di errori.
purtroppo la programmazione (parola grossa) non è il mio mondo.

andbin
28-01-2007, 15:41
se hai tempo di darci un'occhiata te ne sarei davvero grato.
non ti sapaventare però, sarà zeppo di errori.Errori particolari non ne vedo. La struttura del codice sarebbe decisamente migliorabile (mi riferisco a indentazioni, spaziature, denominazioni di classi/variabili, ecc...).

Ovviamente è da completare e migliorare, non è sufficiente quello che hai fatto per fare un buon convertitore! Già adesso ci sono delle cose a livello concettuale che non vanno bene. Ad esempio, se inserisco un valore che non è valido, correttamente fai apparire la scritta "Inserire valore numerico!!". Se però successivamente metto un valore corretto, tale scritta non viene tolta.
Inoltre fai la conversione in qualunque caso, anche quando non è ancora stata scelta la grandezza fisica e le unità di misura.

Al momento hai messo solo 2 grandezze fisiche, non so se ne dovrai aggiungere altre o se bastano quelle. Sarebbe una ottima cosa realizzare delle classi apposite (es. GrandezzaFisica e poi Pressione e Energia che derivano da GrandezzaFisica), a cui "delegare" il compito di gestire le varie conversioni. Questo è un tipico modo per evitare il "mega" switch che stavi per fare .... (e che hai commentato).

ZuMBi
28-01-2007, 21:10
Sarebbe una ottima cosa realizzare delle classi apposite (es. GrandezzaFisica e poi Pressione e Energia che derivano da GrandezzaFisica), a cui "delegare" il compito di gestire le varie conversioni
purtroppo non ho la minima idea di come fare.
uno spunto...!?(anche più di uno...)