Problema calcolatrice

di il
3 risposte

Problema calcolatrice

Allora ragazzi, in attesa del libro su swing consigliato da andbin, ho iniziato a mettere un po' mano da solo con windows builder ma ne è uscito un macello ..
nonostante ciò ho provato a fare una calcolatrice ( aiutandomi con delle guide si internet) ed ecco il codice (malfunzionante,ovviamente..)
public class CalcolatriceFinestra extends JFrame {

	private JPanel contentPane;
	private JTextField textField;
	private JTextField testo;

	
	private boolean displayVuoto=true;
	private int operandoCorrente= 0;
	private char operatoreCorrente= '?';
	/**
	 * Launch the application.
	 */
//	public static void main(String[] args) {
//		EventQueue.invokeLater(new Runnable() {
//			public void run() {
//				try {
//					CalcolatriceFinestra frame = new CalcolatriceFinestra();
//					frame.setVisible(true);
//				} catch (Exception e) {
//					e.printStackTrace();
//				}
//			}
//		});
//	}

	/**
	 * Create the frame.
	 */
	public CalcolatriceFinestra() {
	
		
		setResizable(false);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 171, 218);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(new BorderLayout(0, 0));
		
		textField = new JTextField();
		contentPane.add(textField);
		textField.setColumns(10);
		
		JLabel label = new JLabel("");
		contentPane.add(label);
		
		testo = new JTextField();
		contentPane.add(testo, BorderLayout.NORTH);
		testo.setColumns(10);
		
		JPanel panel = new JPanel();
		contentPane.add(panel, BorderLayout.CENTER);
		panel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
		
		JButton button = new JButton("1");
		button.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent arg0) {
				inseritaCifra(1);
				
			}
		});
		button.setHorizontalAlignment(SwingConstants.LEFT);
		panel.add(button);
		
		JButton button_1 = new JButton("2");
		button_1.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				inseritaCifra(2);
				
			}
		});
		panel.add(button_1);
		
		JButton button_2 = new JButton("3");
		button_2.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				inseritaCifra(3);
			}
		});
		button_2.setHorizontalAlignment(SwingConstants.RIGHT);
		panel.add(button_2);
		
		JButton button_3 = new JButton("4");
		button_3.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				inseritaCifra(4);
			}
		});
		button_3.setHorizontalAlignment(SwingConstants.LEFT);
		panel.add(button_3);
		
		JButton button_4 = new JButton("5");
		button_4.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				inseritaCifra(5);
			}
		});
		panel.add(button_4);
		
		JButton button_5 = new JButton("6");
		button_5.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				inseritaCifra(6);
			}
		});
		button_5.setHorizontalAlignment(SwingConstants.RIGHT);
		panel.add(button_5);
		
		JButton button_6 = new JButton("7");
		button_6.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				inseritaCifra(7);
			}
		});
		button_6.setHorizontalAlignment(SwingConstants.LEFT);
		panel.add(button_6);
		
		JButton button_7 = new JButton("8");
		button_7.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				inseritaCifra(8);
			}
		});
		panel.add(button_7);
		
		JButton button_8 = new JButton("9");
		button_8.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				inseritaCifra(9);
			}
		});
		button_8.setHorizontalAlignment(SwingConstants.RIGHT);
		panel.add(button_8);
		
		JButton button_14 = new JButton("0");
		button_14.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				inseritaCifra(0);
			}
		});
		panel.add(button_14);
		
		JButton button_9 = new JButton("+");
		button_9.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				inseritoOperatore('+');
			}
		});
		panel.add(button_9);
		
		JButton button_12 = new JButton("/");
		button_12.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				inseritoOperatore('/');
			}
		});
		panel.add(button_12);
		
		JButton button_10 = new JButton("-");
		button_10.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				inseritoOperatore('-');
			}
		});
		panel.add(button_10);
		
		JButton button_11 = new JButton("*");
		button_11.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				inseritoOperatore('*');
			}
		});
		panel.add(button_11);
		
		JButton button_13 = new JButton("=");
		button_13.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				inseritoOperatore('=');
			}
		});
		panel.add(button_13);
		panel.setFocusTraversalPolicy(new FocusTraversalOnArray(new Component[]{button, button_1, button_2, button_3}));
		setVisible(true);
		
		
	    }
	//Metodi
			public void inseritaCifra( int i ) {
		        if (displayVuoto) {
		            testo.setText("");
		            displayVuoto = false;
		        }
		        testo.setText(testo.getText() + i);
			}
		        private int calcolaRisultato(int n1,char segno,int n2)
		        {
		        	int a=0;
		        	switch(segno)
		        	{
		        	case '+' : a = (n1+n2);
		        	case '-' : a = (n1-n2);
		        	case '*' : a = (n1*n2);
		        	case '/' : a = (n1*n2);
		        	case '?' : a = 71;
		        	default : a = 0;
		        	}
		        	return a;
		        	
		        }
		        public void inseritoOperatore( char c ) {
		            if (c == '=') 
		            {
		                if (operatoreCorrente != '?') 
		                {
		                    int operando = Integer.parseInt(testo.getText());
		                    int risultato =
		                        calcolaRisultato(operandoCorrente, operatoreCorrente, operando);
		                    testo.setText(String.valueOf(risultato));
		                    operatoreCorrente = '?';
		                    displayVuoto = true;
		                }
		            } 
		            else 
		            {
		                // Gestire l'operatore
		                if (operatoreCorrente == '?') 
		                {
		                    operandoCorrente = Integer.parseInt(testo.getText());
		                } 
		                else 
		                {
		                    int operando = Integer.parseInt(testo.getText());
		                    operandoCorrente =
		                        calcolaRisultato(operandoCorrente, operatoreCorrente, operando);
		                    testo.setText(String.valueOf(operandoCorrente));

		                }
		                operatoreCorrente = c;
		                displayVuoto = true;
		            }
		        }

}
il risultato è sempre 0, credo ci sia qualche problema nel costrutto switch perchè il codice mi sembra sensato e mi sono ispirato da una guida quindi non penso sia del tutto orripilante..per il resto non vi dico che odio verso questi layout predefiniti..un casino per mettere i pulsanti un po' come volevo io..aaaaaaah


Edit: risolto, non ditemi proprio quanto sono stupido cortesemente..
rimango il post se qualcuno potrebbe indirizzarmi qualche modo buono per imparare ad utilizzare le interfacce grafiche in attesa del libro

3 Risposte

  • Re: Problema calcolatrice

    ercucchiaio ha scritto:


    ho iniziato a mettere un po' mano da solo con windows builder ma ne è uscito un macello ..
    Gli editor "visuali" di GUI ti permettono certamente di creare velocemente una interfaccia utente ma a discapito di altri aspetti negativi (codice prolisso, tipicamente poco comprensibile e difficilmente maneggiabile a mano, ecc...).

    Quindi cerca di studiare e ragionare di più in termini di Swing ... e non di un editor visuale.

    ercucchiaio ha scritto:


    nonostante ciò ho provato a fare una calcolatrice ( aiutandomi con delle guide si internet) ed ecco il codice (malfunzionante,ovviamente..)
    Il tuo codice presenta comunque parecchie ripetizioni, che sarebbero evitabili strutturando diversamente il codice in modo più "ragionato".

    ercucchiaio ha scritto:


    il risultato è sempre 0, credo ci sia qualche problema nel costrutto switch perchè il codice mi sembra sensato

    Edit: risolto, non ditemi proprio quanto sono stupido cortesemente..
    Sì, mancavano i break. Altrimenti effettua il "fall-through" ovvero passa attraverso tutte le istruzioni dei vari case seguenti quello scelto.
  • Re: Problema calcolatrice

    ercucchiaio ha scritto:


    rimango il post se qualcuno potrebbe indirizzarmi qualche modo buono
  • Re: Problema calcolatrice

    Mimonic risparmiati commenti del genere e cerca di essere più umile, con questo buona serata
Devi accedere o registrarti per scrivere nel forum
3 risposte