Problema con le operazioni

di il
1 risposte

Problema con le operazioni

Salve, sto creando una calcolatrice grafica in java, e tutto va benissimo, i pulsanti vanno, gli actionlistener funzionano. l'unica cosa sono... le operazioni. io uso questo metodo:

- con i tasti scrivi il numero
- quando premi un operatore immagazzino in una variabile il numero attuale
- quando premi uguale, il numero diventa l'operazione x, fra il numero immagazzinato e quello attuale

solo che i numeri sono ad esempio 12-2=-14 oppure 100*2=84

ecco il codice:
// importo packages
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

// classe della finestra principale
public class Finestramenu extends Frame {
   
   int opdef = 0, res = 0, adv = 0;
   
   // bottoni base
   JButton button = new JButton("="); 
   JButton b1=new JButton("1"); JButton bf=new JButton("Math");
   JButton b2=new JButton("2"); JButton b3=new JButton("3");
   JButton b4=new JButton("4"); JButton b5=new JButton("5");
   JButton b6=new JButton("6"); JButton b7=new JButton("7");
   JButton b8=new JButton("8"); JButton b9=new JButton("9");
   JButton bp=new JButton("+"); JButton bx=new JButton("*");
   JButton bd=new JButton("/"); JButton b0=new JButton("0");
   JButton bm=new JButton("-"); JButton bn=new JButton("C");
   
   // bottoni math
   JButton blog=new JButton("log"); JButton bln=new JButton("ln");
   JButton bcos=new JButton("cos"); JButton bsin=new JButton("sin");
   JButton bpi=new JButton("pi"); JButton be=new JButton("e");
   
   MenuItem aiuto=new MenuItem("Help");
   MenuItem somma=new MenuItem("Somma");
   MenuItem esci=new MenuItem("Esci");
   
   Menu file= new Menu("File");
   Menu edit= new Menu("Func");
   Menu help= new Menu("Help");
   
   MenuBar barra = new MenuBar();
   JLabel risultato = new JLabel("*",JLabel.CENTER);
   JTextField t1 = new JTextField();
   JTextField t2 = new JTextField();
   
   public Finestramenu() {
	 
     setupEventi();
     setupElementi();
	 setLayout(new GridLayout(6,1));
	 
     edit.add(somma);
     help.add(aiuto);
     barra.add(file);
     //barra.add(edit);
     barra.setHelpMenu(help);
     setMenuBar(barra);
     
     // aggiungo elementi
     add(t1); add(b1); add(b2); add(b3); add(b4);
     add(b5); add(b6); add(b7); add(b8); add(b9);
     add(b0); add(bp); add(bm); add(bd); add(bx);
     add(bn); add(button); add(bf);
    
     doLayout();
     pack();
     addWindowListener(new FinestramenuWindowListener());
   }
 
 // metodo main
 public static void main(String[] arg) {
   Finestramenu frame = new Finestramenu();
   frame.setBounds(400,200,220,300);
   frame.setVisible(true);
 }
 
 // Action Listener del Menu
 class AscoltatoreMenu implements ActionListener {
   public void actionPerformed (ActionEvent e) {
    if(e.getActionCommand().compareTo("Esci")==0) {
    	System.exit(0);
    }
    if(e.getActionCommand().compareTo("Help")==0) {
    	showHelp();
    }
    if(e.getActionCommand().compareTo("Somma")==0) {
    	Somma();
    }
    if(e.getActionCommand().compareTo("1")==0) {
    	t1.setText(t1.getText() + Integer.parseInt("1"));
    }
    if(e.getActionCommand().compareTo("2")==0) {
    	t1.setText(t1.getText() + Integer.parseInt("2"));
    }
    if(e.getActionCommand().compareTo("3")==0) {
    	t1.setText(t1.getText() + Integer.parseInt("3"));
    }
    if(e.getActionCommand().compareTo("4")==0) {
    	t1.setText(t1.getText() + Integer.parseInt("4"));
    }
    if(e.getActionCommand().compareTo("5")==0) {
    	t1.setText(t1.getText() + Integer.parseInt("5"));
    }
    if(e.getActionCommand().compareTo("6")==0) {
    	t1.setText(t1.getText() + Integer.parseInt("6"));
    }
    if(e.getActionCommand().compareTo("7")==0) {
    	t1.setText(t1.getText() + Integer.parseInt("7"));
    }
    if(e.getActionCommand().compareTo("8")==0) {
    	t1.setText(t1.getText() + Integer.parseInt("8"));
    }
    if(e.getActionCommand().compareTo("9")==0) {
    	t1.setText(t1.getText() + Integer.parseInt("9"));
    }
    if(e.getActionCommand().compareTo("0")==0) {
    	t1.setText(t1.getText() + Integer.parseInt("0"));
    }
    if(e.getActionCommand().compareTo("+")==0) {
    	opdef = 1;
    	if(t1.getText().compareTo("")==2) {
    	  res = Integer.parseInt(t1.getText());
    	}
    	t1.setText("");
    }
    if(e.getActionCommand().compareTo("*")==0) {
    	opdef = 2;
    	if(t1.getText().compareTo("")==2) {
    		res = Integer.parseInt(t1.getText());
    	}
    	t1.setText("");
    }
    if(e.getActionCommand().compareTo("/")==0) {
    	opdef = 4;
    	if(t1.getText().compareTo("")==2) {
    		res = Integer.parseInt(t1.getText());
    	}
    	t1.setText("");
    }
    if(e.getActionCommand().compareTo("-")==0) {
    	opdef = 3;
    	if(t1.getText().compareTo("")==2) {
    		res = Integer.parseInt(t1.getText());
    	}
    	t1.setText("");
    }
    if(e.getActionCommand().compareTo("=")==0) {
    	OperationDo();
    }
    if(e.getActionCommand().compareTo("C")==0) {
    	t1.setText("");
    }
    if(e.getActionCommand().compareTo("Math")==0) {
    	setMath();
    }
    if(e.getActionCommand().compareTo("Base")==0) {
    	setBase();
    }
   }
 }
 
 
 // window listener - apparentemente inutile
 class FinestramenuWindowListener implements WindowListener
 {
  public void windowActivated(WindowEvent e) {
    System.out.println("Loop on Window Activated");
  }
  public void windowClosed(WindowEvent e) {
    System.out.println("Loop on Window Closed");
  }
  public void windowClosing(WindowEvent e)
  {
   System.out.println("Loop on Window Closing");
   System.exit(0);
  }
  public void windowDeactivated(WindowEvent e) {
    System.out.println("Loop on Window Deactivaded");
  }
  public void windowDeiconified(WindowEvent e) {
    System.out.println("Loop on Window Deiconified");
  }
  public void windowIconified(WindowEvent e) {
    System.out.println("Loop on Window Iconified");
  }
  public void windowOpened(WindowEvent e) {
    System.out.println("Loop on Window Opened");
  }
 }
 
 // Metodo di aiuto
 public void showHelp() {
	 JFrame frame = new JFrame();
	 JLabel help_1 = new JLabel("Questo è un programma di prova!", JLabel.CENTER);
	 JLabel help_2 = new JLabel("by MagicStcik(c) Software",  JLabel.CENTER);
	 
	 help_1.setBounds(10,10,300,20);
	 help_2.setBounds(10,45,300,20);
	 
	 frame.add(help_1);
	 frame.add(help_2);
	 frame.setBounds(300,300,300,100);
	 frame.setVisible(true);
 }
 
 // setup degli elementi
 public void setupElementi() {
	 risultato.setBounds(300,20,300,30);
	 t1.setBounds(10,10, 100,40);
	 t1.setBackground(Color.gray);
	 t2.setBackground(Color.gray);
	 button.setSize(40,30);
	 System.out.println(bn.getActionCommand());
 }
 
 // sistema di controllo somma
 public void Somma() {
	 risultato.setText("+");
 }
 
 public void OperationDo() {
	 int temp = Integer.parseInt(t1.getText());
	 System.out.println(res);
	 if(opdef == 1) {
		 temp = temp + res;
	 }
	 if(opdef == 2) {
		 temp = temp * res;
	 }
	 if(opdef == 4) {
		 temp = temp / res;
	 }
	 if(opdef == 3) {
		 temp = temp - res;
	 }
	 System.out.println(res);
	 t1.setText(Integer.toString(temp));
 }
 
 // cambio di layout
 public void setMath() {
	 bf.setText("Base");
	 addButtonMath();
	 setLayout(new GridLayout(8,1));
	 doLayout();
 }
 public void setBase() {
	 bf.setText("Math");
	 removeButtonMath();
	 setLayout(new GridLayout(6,1));
	 doLayout();
 }
 public void addButtonMath() {
	 add(blog); add(bln); add(bcos);
	 add(bsin); add(be); add(bpi);
	 
 }
 public void removeButtonMath() {
	 remove(blog); remove(bln); remove(bcos);
	 remove(bsin); remove(be); remove(bpi);
 }
 
 
 //setup degli ActionListener
 void setupEventi() {
 
   // listener del menu
   aiuto.addActionListener(new AscoltatoreMenu());
   somma.addActionListener(new AscoltatoreMenu());
   esci.addActionListener(new AscoltatoreMenu());
   b1.addActionListener(new AscoltatoreMenu());
 
   // listener dei bottoni
   b2.addActionListener(new AscoltatoreMenu());
   b3.addActionListener(new AscoltatoreMenu());
   b4.addActionListener(new AscoltatoreMenu());
   b5.addActionListener(new AscoltatoreMenu());
   b6.addActionListener(new AscoltatoreMenu());
   b7.addActionListener(new AscoltatoreMenu());
   b8.addActionListener(new AscoltatoreMenu());
   b9.addActionListener(new AscoltatoreMenu());
   b0.addActionListener(new AscoltatoreMenu());
   bp.addActionListener(new AscoltatoreMenu());
   bx.addActionListener(new AscoltatoreMenu());
   bm.addActionListener(new AscoltatoreMenu());
   bd.addActionListener(new AscoltatoreMenu());
   bn.addActionListener(new AscoltatoreMenu());
   bf.addActionListener(new AscoltatoreMenu());
   button.addActionListener(new AscoltatoreMenu());
   
   // listener bottoni math
   blog.addActionListener(new AscoltatoreMenu());
   bln.addActionListener(new AscoltatoreMenu());
   bpi.addActionListener(new AscoltatoreMenu());
   be.addActionListener(new AscoltatoreMenu());
   bcos.addActionListener(new AscoltatoreMenu());
   bsin.addActionListener(new AscoltatoreMenu());
 }
}

1 Risposte

  • Re: Problema con le operazioni

    Correggo: il problema della sottrazione è stato risolto.

    NUOVO PROBLEMA
    ---------------------

    il programma impazzisci SOLO quando inseriamo numeri da più di 2 cifre
Devi accedere o registrarti per scrivere nel forum
1 risposte