Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [Java] Gestione eventi!!!

    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!!!!

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    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ì:

    codice:
    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.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Per adesso non ho il tempo di provarlo, ma a prima vista mi sembra buono, grazie tante... ti farò sapere!!!!

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Come promesso... ho realizzato la classe che richiedevi.
    Lascio però a te la gestione degli errori.

    codice:
    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.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.