Visualizzazione dei risultati da 1 a 4 su 4

Discussione: gestione eventi

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    123

    gestione eventi

    Ho il seguente esercizio:
    Realizzare una semplice calcolatrice con i pulsanti da 1 a 9, quattro pulsanti per le operazioni matematiche, un pulsante esegui operazioni e una jtexfield per visualizzare i dati immensi ed il risultato
    Al momento ho fatto il seguente codice :
    codice:
    public class FinestraCalcolatrice implements ActionListener{
            JTextField testo1 = null;
            JTextField testo2 = null;
            JButton bottone2 = null;
        public FinestraCalcolatrice()
        {
            JFrame frame = new JFrame("Calcolatrice");
            JPanel pannello = new JPanel();
            testo1 = new JTextField(10);
            testo2 = new JTextField(10);
            pannello.add(testo1);
            pannello.add(testo2);
            JButton bottone1 = new JButton("Esegui Operazione");
            pannello.add(bottone1);
            bottone1.addActionListener(this);
            bottone2 = new JButton(" + ");
            pannello.add(bottone2);
            bottone2.addActionListener(this);
            for(int i=1;i<10;i++)
            {
                JButton bottone = new JButton(i+"");
                pannello.add(bottone);
                bottone.addActionListener(this);
            }
    
    
            frame.add(pannello);
            frame.setBounds(200, 100, 300, 200);
            frame.setResizable(false);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
        }
        public static void main(String[] args) {
            FinestraCalcolatrice calc = new FinestraCalcolatrice();
        }
        public void actionPerformed(ActionEvent e) {
            String comando = e.getActionCommand();
            System.out.println("comando = " +comando);
            String valore1 = testo1.getText();
            String valore2 = testo2.getText();
            int num1 = Integer.parseInt(valore1);
            int num2 = Integer.parseInt(valore2);
            int somma = num1+num2;
            bottone2.setText(somma+"");
        }
    }
    Adesso stò provando solo con il pulsante +, ma non riesco a gestire bene l'evento...per esempio vorrei fare in modo che una volta inserito il valore nella textfield e spinto + si potesse inserire ancora unaltro valore nella stessa text field..
    e poi non riesco a far apparire il risultato, o meglio mi appare ma in sovrapposizione al + e posso solo inserire due valori che inserisco da tastiera ma senza utilizzare i pulsanti numerici della calcolatrice, cosa che invece dovrei fare...
    Help me...

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Semplice: l'azione associata al bottone "+" prende il valore nel testo e lo memorizza all'interno di una variabile interna first ad esempio. Devi memorizzarti anche l'operazione che vuoi fare.
    fatta l'assegnazione cancelli il testo della textfield e sei pronto a ricevere nuovi valori.
    Al pulsante "=" associ l'azione che prende first e second e fa l'operazione scelta.
    Una generalizzazione vuole che i fattori li metti all'interno di una struttura dinamica o che fai somme parziali (es quando sommi più di 2 valori).

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    123
    Grazie valia, è ancora un pò difficile per me perchè ho solo visto ieri queste cose...comunque ci proverò anche se la vedo molto dura...
    e per attivare i vari bottoni che corrispondo ai numeri da 1 a 9?

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Beh secondo me per fare tutto con il meno codice possibile (riusandolo) puoi seguire due vie:

    1. fai una classe generica che implementa actionlistener, ma hai un if ogni possibile tasto e non è né performante né elegante (ma sull'eleganza ognuno ha le sue opinioni). L'evento si porta dietro qualche info su chi lo ha generato (dovrebbe essere actionCommand che devi provvedere a settare quando crei il bottone).
    2. fai una innerclass per ogni bottone

    codice:
    bottone.setActionListener(new ActionListener() {
                public void actionPerformed( ActionEvent event ) {
                       //do your stuff here
                }
            });
    la seconda soluzione è più elegante della prima (non hai una marea di if, ogni bottone sa cosa fare), ma crea una marea di classi inner che fanno cose simili.

    IL secondo caso lo ottimizzi creando una gerarchia di listener, ma in linea di principio le soluzioni sono queste

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 © 2025 vBulletin Solutions, Inc. All rights reserved.