Przekazywanie wartości zmiennej między klasami

0

Cześć, otóż mam taki problem, chciałem mieć zmienną sterowniczą do wyboru działania i niestety nie przekazuje mi jej między klasami lub też nie nadpisuje zdefiniowanej zmiennej, chodzi tutaj o zmienną działanie i przekazywanie jej między klasami dodaj, odejmij, pomnóż, podziel a klasą równa się która wyświetla wynik.

Może ktoś mi to poprawić bo już siły na to nie mam :) A to dopiero moje pierwsze kroki w Javie.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package kalkulatorokienkowy;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import java.awt.Toolkit;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Locale;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
 *
 * @author Piotr
 */



public class KalkulatorOkienkowy extends JFrame {
    
    JTextField okno;
     
    public KalkulatorOkienkowy() {
        setSize(310,500);
        setTitle("Kalkulator okienowy al a Windows");
        
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        
        getContentPane().add(panel);
        panel.setLayout(null);
        
        //wprowadzanie danych i wyprowadzenie wyniku
        okno = new JTextField("",12);
        okno.setBounds(25, 25, 245, 30); //x, y, szer wys
        add(okno);
        
        //liczby            
        JButton siedem=new JButton("7");
        siedem.setBounds(25, 75, 50, 25);
        add(siedem);
        siedem.addActionListener(new wpiszSiedem());
        
        JButton cztery=new JButton("4");
        cztery.setBounds(25, 110, 50, 25);
        add(cztery);
        cztery.addActionListener(new wpiszCztery());
        
        JButton jeden=new JButton("1");
        jeden.setBounds(25, 145, 50, 25);
        add(jeden);
        jeden.addActionListener(new wpiszJeden());
        
        JButton osiem=new JButton("8");
        osiem.setBounds(90, 75, 50, 25);
        add(osiem);
        osiem.addActionListener(new wpiszOsiem());
        
        JButton piec=new JButton("5");
        piec.setBounds(90, 110, 50, 25);
        add(piec);
        piec.addActionListener(new wpiszPiec());
        
        JButton dwa=new JButton("2");
        dwa.setBounds(90, 145, 50, 25);
        add(dwa);
        dwa.addActionListener(new wpiszDwa());
        
        JButton dziewiec=new JButton("9");
        dziewiec.setBounds(155, 75, 50, 25);
        add(dziewiec);
        dziewiec.addActionListener(new wpiszDziewiec());
        
        JButton szesc=new JButton("6");
        szesc.setBounds(155, 110, 50, 25);
        add(szesc);
        szesc.addActionListener(new wpiszSzesc());
        
        JButton trzy=new JButton("3");
        trzy.setBounds(155, 145, 50, 25);
        add(trzy);
        trzy.addActionListener(new wpiszTrzy());
                
        JButton zero=new JButton("0");
        zero.setBounds(25, 180, 50, 25);
        add(zero);
        zero.addActionListener(new wpiszZero());
        
        JButton c=new JButton("C");
        c.setBounds(90, 180, 50, 25);
        add(c);
        c.addActionListener(new usun());
        
        JButton r=new JButton("=");
        r.setBounds(155, 180, 50, 25);
        add(r);
        r.addActionListener(new rownaSie());
                
        //dzialania
        JButton dodawanie=new JButton("+");
        dodawanie.setBounds(220, 75, 50, 25);
        add(dodawanie);
        dodawanie.addActionListener(new dodaj());
        
        JButton odejmowanie=new JButton("-");
        odejmowanie.setBounds(220, 110, 50, 25);
        add(odejmowanie);
        odejmowanie.addActionListener(new odejmij());
        
        JButton mnozenie=new JButton("*");
        mnozenie.setBounds(220, 145, 50, 25);
        add(mnozenie);
        mnozenie.addActionListener(new pomnoz());
        
        JButton dzielenie = new JButton("/");
        dzielenie.setBounds(220,180, 50, 25);
        add(dzielenie);
        dzielenie.addActionListener(new podziel()); 
        
        add(panel);
        
    }
    
    char dzialanie;     
    long a, b, wynik =0;    
    
        class rownaSie implements ActionListener
        {
        @Override
            public void actionPerformed(ActionEvent e)
            {
               b = Integer.parseInt(okno.getText());
               
               switch(dzialanie)
               {
                   case '+':
                       wynik = a+b;
                       okno.setText(""+wynik);
                     
                   case'-':
                       wynik = a-b;
                       okno.setText(""+wynik);
                       a = Integer.parseInt(okno.getText());;
                       
                   case '*':
                   wynik = a/b;
                       
                   case '/':
                   
                   if(b!=0){
                       wynik = a*b;
                       okno.setText(""+wynik);
                   } 
                   else {
                       okno.setText("Nie dziel przez zero");
                   }
                   
                   default: 
                   okno.setText("Jest blad : /");
                     
                  }       
            }
        }
    class dodaj implements ActionListener
        {
  
            public void actionPerformed(ActionEvent e)
            {
               a = Integer.parseInt(okno.getText());
               dzialanie = '+';
               okno.setText("");
            }
        }
    
    class odejmij implements ActionListener
        {
            public void actionPerformed(ActionEvent e)
            {
               a = Integer.parseInt(okno.getText());
               dzialanie = '-';
               okno.setText("");
            }
        }
    
    class pomnoz implements ActionListener
        {
            public void actionPerformed(ActionEvent e)
            {
               a = Integer.parseInt(okno.getText());
               dzialanie = '*';
               okno.setText("");
            }
        }
    
    class podziel implements ActionListener
        {
            public void actionPerformed(ActionEvent e)
            {
               a = Integer.parseInt(okno.getText());
               dzialanie = '/';
               okno.setText("");
            }
        }
    
    class usun implements ActionListener
        {
            public void actionPerformed(ActionEvent e)
            {
                a=0;
                b=0;
               okno.setText("");
            }
        }
    
    class wpiszZero implements ActionListener
        {
            public void actionPerformed(ActionEvent e)
            {
               okno.setText(okno.getText()+"0");
            }
        }
    
    class wpiszJeden implements ActionListener
        {
            public void actionPerformed(ActionEvent e)
            {
               okno.setText(okno.getText()+"1");
            }
        }
        
    class wpiszDwa implements ActionListener
        {
            public void actionPerformed(ActionEvent e)
            {
               okno.setText(okno.getText()+"2");
            }
        }
        
    class wpiszTrzy implements ActionListener
        {
            public void actionPerformed(ActionEvent e)
            {
               okno.setText(okno.getText()+"3");
            }
        }

    class wpiszCztery implements ActionListener
        {
            public void actionPerformed(ActionEvent e)
            {
               okno.setText(okno.getText()+"4");
            }
        }
    
    class wpiszPiec implements ActionListener
        {
            public void actionPerformed(ActionEvent e)
            {
               okno.setText(okno.getText()+"5");
            }
        }
    
    class wpiszSzesc implements ActionListener
        {
            public void actionPerformed(ActionEvent e)
            {
               okno.setText(okno.getText()+"6");
            }
        }
    
    class wpiszSiedem implements ActionListener
        {
            public void actionPerformed(ActionEvent e)
            {
               okno.setText(okno.getText()+"7");
            }
        }
    class wpiszOsiem implements ActionListener
        {
            public void actionPerformed(ActionEvent e)
            {
               okno.setText(okno.getText()+"8");
            }
        }
    
    class wpiszDziewiec implements ActionListener
        {
            public void actionPerformed(ActionEvent e)
            {
               okno.setText(okno.getText()+"9");
            }
        }
     
    public static void main(String[] args) {
        KalkulatorOkienkowy obiekt = new KalkulatorOkienkowy();
        obiekt.setVisible(true);
        
      
        
    }
}

Pozdrawiam

0

Myślisz, że komuś się będzie chciało to czytać :P
Nie chodzi ci po prostu o:
public int nazwa; ?

0

Nie, to jest cały kod do podglądu.
Proszę zwrócić uwagę na zmienną char dzialanie oraz klasy np. dodaj oraz rownaSie.

Pozdrawiam

0

Według mnie powinieneś zrobić to zupełnie inaczej.

  1. Nie po to jest tyle typów layout'ów, żeby używać tylko absolute.
    http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/GridBagLayout.html
  2. Wystarczy napisać metodę addButton(String name), żeby tworzyć przyciski, a nie wszystkie wypisywać.
  3. Na prawdę istnieje coś takiego jak metoda, nie musisz do takich rzeczy jak dodawanie używać klas, bo to bez sensu
  4. Na początek zobacz sobie jak inne aplikacje są zrobione i bierz się za swoją :)
    Jest mnóstwo poradników jak napisać kalkulator.

Pozdrawiam

1

Czy ty jestes NORMALNY?! Słyszałeś o czymś takim jak pętle i tablice? A za tego chamskiego copy-paste powinieneś dostać zakaz uzywania komputera przez miesiąc. Czym się różnią klasy wpiszX() od siebie? NICZYM, tylko argumentem. Więc PO CO zrobiłeś tyle klas? Nie dało się zrobić jednej? Tak samo robienie tych buttonów w taki sposób o_O. Skasuj to czym prędzej i napisz to jeszcze raz, tym razem jak człowiek. Działający kalkulator taki jak ten, można napisać w mniej niż 100 linijkach.

0

Próbowałem powiedzieć to samo, tylko trochę łagodniej...

0

No tak, macie racje koledzy, trochę poprawiłem, do ideału pewnie dużo brakuje ale już to wygląda lepiej :)

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package kalkulatorokienkowy;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import java.awt.Toolkit;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Locale;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
 *
 * @author Piotr
 */



public class KalkulatorOkienkowy extends JFrame implements ActionListener {
    
    JTextField okno;
    private JButton tabPrzyciskow[];
    char dzialanie;
    long wynik =0;
    int a, b =0;
     
    public KalkulatorOkienkowy() {
        setSize(310,500);
        setTitle("Kalkulator okienowy al a Windows");
        
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        
        getContentPane().add(panel);
        panel.setLayout(null);
        
        //wprowadzanie danych i wyprowadzenie wyniku
        okno = new JTextField("",12);
        okno.setBounds(25, 25, 245, 30); //x, y, szer wys
        add(okno);
        
        tabPrzyciskow = new JButton[17];
        
        for (int i=0; i<=9; i++)
        {
            tabPrzyciskow[i] = new JButton(String.valueOf(i));
	}
        
        tabPrzyciskow[10] = new JButton("+");
	tabPrzyciskow[11] = new JButton("-");
	tabPrzyciskow[12] = new JButton("*");
	tabPrzyciskow[13] = new JButton("/");
        
        tabPrzyciskow[14] = new JButton("0");
	tabPrzyciskow[15] = new JButton("C");
        tabPrzyciskow[16] = new JButton("=");
        
        //liczby
        int pomX=25;
        for(int i=7; i<=9; i++)
	{
            tabPrzyciskow[i].setBounds(pomX, 75, 50, 25);
            add(tabPrzyciskow[i]);
            pomX=pomX+65;
	}
        
        pomX=25;
        for(int i=4; i<=6; i++)
	{
            tabPrzyciskow[i].setBounds(pomX, 110, 50, 25);
            add(tabPrzyciskow[i]);
            pomX=pomX+65;
	}
        
        pomX=25;
        for(int i=1; i<=3; i++)
	{
            tabPrzyciskow[i].setBounds(pomX, 145, 50, 25);
            add(tabPrzyciskow[i]);
            pomX=pomX+65;
	}
        
        //0, CE, =
        pomX=25;
        for(int i=14; i<=16; i++)
	{
            tabPrzyciskow[i].setBounds(pomX, 180, 50, 25);
            if(i>=15) {
            tabPrzyciskow[i].setForeground(Color.red);
            }
            add(tabPrzyciskow[i]);
            pomX=pomX+65;
	}
        //operatory + - * /
        int pomY=75;
        for(int i=10; i<=13; i++)
	{
            tabPrzyciskow[i].setBounds(220, pomY, 50, 25);
            tabPrzyciskow[i].setForeground(Color.red);
            add(tabPrzyciskow[i]);
            pomY=pomY+35;
	}
        
        add(panel);
        
        for (int i=0; i<tabPrzyciskow.length; i++)
        {
            tabPrzyciskow[i].addActionListener(this);
	}
        
    } 
     
    public static void main(String[] args) {
        KalkulatorOkienkowy obiekt = new KalkulatorOkienkowy();
        obiekt.setVisible(true);
        
      
        
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        for (int i=0; i<tabPrzyciskow.length; i++)
		{
			if(e.getSource() == tabPrzyciskow[i])
			{
				switch(i)
				{
                                    case 14:
                                        cyferka(0);
					break;
                                    case 1:
                                        cyferka(i);
					break;
                                    case 2:
                                        cyferka(i);
					break;
                                    case 3:
                                        cyferka(i);
					break;
                                    case 4:
                                        cyferka(i);
					break;
                                    case 5:
                                        cyferka(i);
					break;
                                    case 6:
                                        cyferka(i);
					break;
                                    case 7:
                                        cyferka(i);
					break;
                                    case 8:
                                        cyferka(i);
					break;
                                    case 9: 
                                        cyferka(i);
					break;
                                    case 10: 
                                        dzialanie('+');
					break;
                                    case 11: 
                                        dzialanie('-');
					break;
                                    case 12: 
                                        dzialanie('*');
					break;
                                    case 13: 
                                        dzialanie('/');
					break;
                                        
                                        //14 to 0 było pierwsze
                                    case 15: 
                                        dzialanie('C');
					break;
                                    case 16: 
                                        dzialanie('=');
					break;
                                }
                        }
                }
         
    }

    private void cyferka(int i) {
        okno.setText(okno.getText()+i);
    }

    private void dzialanie(char c) {
        switch(c)
        {
            case '+':
               a = Integer.parseInt(okno.getText());
               okno.setText("");
               dzialanie = '+';
               break;
            case '-':
               a = Integer.parseInt(okno.getText());
               okno.setText("");
               dzialanie = '-';
                break;
            case '*':
               a = Integer.parseInt(okno.getText());
               okno.setText("");
               dzialanie = '*';
                break;
            case '/':
               a = Integer.parseInt(okno.getText());
               okno.setText("");
               dzialanie = '/';
                break;
            case 'C':
                okno.setText("");
                a=0;
                b=0;
                wynik=0;
                break;
                
            case '=':
               b = Integer.parseInt(okno.getText());
               switch(dzialanie)
               {
                   case '+':
                       wynik = a+b;
                       okno.setText(""+wynik);
                       break;                     
                   case'-':
                       wynik = a-b;
                       okno.setText(""+wynik);
                       a = Integer.parseInt(okno.getText());
                       break;                       
                   case '*':
                        wynik = a*b;
                        okno.setText(""+wynik);
                       break;                       
                   case '/':                   
                   if(b!=0){
                       wynik = a/b;
                       okno.setText(""+wynik);
                   } 
                   else {
                       okno.setText("Nie dziel przez zero");
                   }
                        break;
                   default: 
                        okno.setText("Jest blad : /");
                        break;
                     
                  } 
                break;          
        }
    }

}


 
0

Ech. actionListenera dla cyferek zrób osobno. Wtedy on będzie miał raptem jedną linijkę. actionListenera dla reszty zrób osobno.

1 użytkowników online, w tym zalogowanych: 0, gości: 1