PDA

Visualizza la versione completa : [Java] Gestione eventi!!!


Therock80
10-10-2003, 16:58
Ciao a tutti... il mio problema e che non ho idea di come gestire più
pulsanti in attesa di evento.
Esempio:
Voglio calcolare la somma, la differenza e il prodotto tra 2 interi:
Inserisco in una finestra gli interi, poi con il pulsante somma dico al programma che deve eseguire la somma, ed con il pulsante calcola esegue il calcolo e altrettanto per le altre opzioni.
In linea di massima il programma si basa su questo e dovrebbe essere un'applet qualcuno mi può aiutare!!!!

LeleFT
11-10-2003, 00:33
Per il tuo problema è sufficiente che ogni volta che premi uno dei pulsanti Somma, Sottrai, Moltiplica e Dividi, il programma imposti una variabile che tenga traccia di quale pulsante è stato premuto.

Una variabile di tipo byte va benissimo.

Per gestire la pressione di più pulsanti in un unico blocco puoi fare così:



public class MiaClasse extends Applet implements ActionListener {
... // tutti i tuoi oggetti e variabili

// all'interno del costruttore (presumibilmente):
pulsante1.addActionListener(this);
pulsante2.addActionListener(this);
... // E così via per tutti i pulsanti che vuoi gestire in questa classe

calcola.addActionListener(this);

// metodo a parte all'interno della classe MiaClasse
public void actionPerformed(ActionEvent ae) {
if (ae.getSource().equals(pulsante1) {
// codice del primo pulsante
} else if (ae.getSource().equals(pulsante2) {
// codice del secondo pulsante
} //... e così via per tutti i pulsanti
} else if (ae.getSource().equals(calcola) {
// controllo la variabile impostata
// così so quale pulsante è stato premuto
// e faccio quello che devo fare
}
}

... // resto dei metodi o quant'altro.
} // Fine MiaClasse


Purtroppo al momento il browser di questo PC non mi visualizza le applet, quindi non ho potuto realizzare l'applicazione intera, comunque in linea di massima è questo ciò che devi fare.
Se avrai bisogno, spero di poterti postare l'intero codice, quando avrò a disposizione un PC con un browser ben configurato.


Ciao.

Therock80
11-10-2003, 18:32
Per adesso non ho il tempo di provarlo, ma a prima vista mi sembra buono, grazie tante... ti farò sapere!!!!

LeleFT
11-10-2003, 21:38
Come promesso... ho realizzato la classe che richiedevi.
Lascio però a te la gestione degli errori.



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

public class Calcolatrice extends Applet implements ActionListener {

private Button calcola;
private Button somma;
private Button sottrai;
private Button moltiplica;
private Button dividi;
private TextField txtPrimoNumero;
private TextField txtSecondoNumero;
private Label primoNum;
private Label secondoNum;
private Label risultato;
private byte operazione;

public void init() {
setLayout(null);
operazione = 0;

primoNum = new Label("Primo numero:");
primoNum.setBounds(10, 10, 100, 18);
primoNum.setBackground(Color.green);

secondoNum = new Label("Secondo numero:");
secondoNum.setBounds(10, 30, 110, 18);
secondoNum.setBackground(Color.green);

risultato = new Label("Risultato:");
risultato.setBounds(10, 50, 200, 18);

txtPrimoNumero = new TextField();
txtPrimoNumero.setBounds(115, 10, 40, 18);

txtSecondoNumero = new TextField();
txtSecondoNumero.setBounds(125, 30, 40, 18);

somma = new Button("Somma");
somma.setBounds(250, 10, 50, 20);
somma.addActionListener(this);
sottrai = new Button("Sottrai");
sottrai.setBounds(250, 35, 50, 20);
sottrai.addActionListener(this);
moltiplica = new Button("Moltiplica");
moltiplica.setBounds(250, 60, 50, 20);
moltiplica.addActionListener(this);
dividi = new Button("Dividi");
dividi.setBounds(250, 85, 50, 20);
dividi.addActionListener(this);
calcola = new Button("Calcola");
calcola.setBounds(250, 110, 50, 20);
calcola.addActionListener(this);

add(primoNum);
add(secondoNum);
add(risultato);
add(txtPrimoNumero);
add(txtSecondoNumero);
add(somma);
add(sottrai);
add(moltiplica);
add(dividi);
add(calcola);
}

public void actionPerformed(ActionEvent ae) {
try {
int num1 = Integer.parseInt(txtPrimoNumero.getText());
int num2 = Integer.parseInt(txtSecondoNumero.getText());

if (ae.getSource().equals(somma)) {
operazione = 1;
} else if (ae.getSource().equals(sottrai)) {
operazione = 2;
} else if (ae.getSource().equals(moltiplica)) {
operazione = 3;
} else if (ae.getSource().equals(dividi)) {
operazione = 4;
} else if (ae.getSource().equals(calcola)) {
switch(operazione) {
case 1: risultato.setText("Risultato: "+ (num1+num2)); break;
case 2: risultato.setText("Risultato: "+ (num1-num2)); break;
case 3: risultato.setText("Risultato: "+ (num1*num2)); break;
case 4: risultato.setText("Risultato: "+ (num1/num2)); break;
}
}
} catch (NumberFormatException nfe) { nfe.printStackTrace(); }
}
}


L'applet io l'ho impostata con dimensione 500 x 500, ma va bene anche meno... comunque puoi gestire anche questo.

Ciao.

Loading