update 16-03-04
//Kalkulator2.java
/** cos co ma udawac profesjonalny kalkulator
*@author Jaroslaw Czarniak
*@version 2.11
*@since 16-03-2004
*/
import java.awt.*;
import java.awt.event.*;
import java.lang.Math;
public class Kalkulator2 extends Frame
{
private TextField wyswietlacz;
/*
utworzenie pol
poczatkowy argument to 0
poczatkowy operator mat. to =
nic nie ma na wyswietlaczu
*/
private double argument = 0;
private String operator = "=";
private boolean start = true;
private String ostatni_kl = "";
private double pamiec = 0;
private String tmp = "";
/**Inicjalizacja GUI*/
public static void main(String arguments[])
{
new Kalkulator2();
}
/**konstruktor, utworzenie GUI*/
public Kalkulator2()
{
addWindowListener(new WindowHandler());
Panel zero = new Panel ();
zero.setLayout (new GridLayout(1,1));
wyswietlacz = new TextField("0",35);
wyswietlacz.setEditable(false);
zero.add(wyswietlacz);
add("North", zero);
Panel dwa = new Panel();
dwa.setLayout (new GridLayout(1,5));
dwa.add(new Button("M+"));
dwa.add(new Button("M-"));
dwa.add(new Button("MR"));
dwa.add(new Button("MC"));
dwa.add(new Button("CE"));
//dwa.add(new Button("check"));
add("Center", dwa);
Panel jeden = new Panel();
jeden.setLayout (new GridLayout(5,4));
jeden.add(new Button("+/-"));
jeden.add(new Button("Sqr"));
jeden.add(new Button("<="));
jeden.add(new Button("x*x"));
jeden.add(new Button("7"));
jeden.add(new Button("8"));
jeden.add(new Button("9"));
jeden.add(new Button("/"));
jeden.add(new Button("4"));
jeden.add(new Button("5"));
jeden.add(new Button("6"));
jeden.add(new Button("*"));
jeden.add(new Button("1"));
jeden.add(new Button("2"));
jeden.add(new Button("3"));
jeden.add(new Button("-"));
jeden.add(new Button("0"));
jeden.add(new Button("."));
jeden.add(new Button("="));
jeden.add(new Button("+"));
add("South", jeden);
pack();
setSize(200,240);
setResizable(false);
setTitle("Kalkulator v.2.1");
setVisible(true);
}
/**odpalane po kliknieciu, na caly kalkulator ustawiamy wychwytywanie zdarzen*/
public boolean action(Event zdarzenie, Object argument)
{
//przepisuje zawartosc 'argument' do zmiennej 'tmp' typu string
tmp = (String) argument;
if (tmp == "Sqr")
{
wyswietlacz.setText(Double.toString(Math.sqrt(Double.parseDouble(wyswietlacz.getText()))));
ostatni_kl = "";
start = false;
return true;
}
if (tmp == "x*x")
{
wyswietlacz.setText(Float.toString(Float.parseFloat(wyswietlacz.getText())*Float.parseFloat(wyswietlacz.getText())));
ostatni_kl = "";
start = false;
return true;
}
char znak = tmp.charAt(0);
//uniemozliwienie wywolania wiecej niz raz tego samego znaku
//zapobiega sytuacji kiedy java bedzie probowac wykonac przykladowo
//takie dzialanie '10' + '+'*/
if (ostatni_kl == tmp) return true;
if (tmp == "CE")
{
czysc();
start = true;
//zakoncz zdarzenie, nie kontynuuj
return true;
}
if (tmp == "M+")
{
pamiec_p();
return true;
}
if (tmp == "M-")
{
pamiec_m();
return true;
}
if (tmp == "MC")
{
pamiec_c();
return true;
}
if (tmp == "MR")
{
pamiec_r();
return true;
}
// jesli zmiana znaku
if (tmp == "+/-")
{
//jesli wyswietlacz nie jest pusty
if (!start)
{
//jesli na poczatku jest minus
if (wyswietlacz.getText().charAt(0) == '-')
{
wyswietlacz.setText(" "+wyswietlacz.getText().substring(1,wyswietlacz.getText().length()));
start = false;
}
//jesli na poczatku jest spacja
else if (wyswietlacz.getText().charAt(0) == ' ')
{
wyswietlacz.setText("-"+wyswietlacz.getText().substring(1,wyswietlacz.getText().length()));
start = false;
}
//jesli jeszcze nie byl zmieniany znak
else
{
wyswietlacz.setText("-"+wyswietlacz.getText().substring(0,wyswietlacz.getText().length()));
start = false;
}
}
return true;
}
//jesli cofniecie znaku
if (tmp == "<=")
{
//jesli jest cos na wyswietlaczu
if (!start)
{
wyswietlacz.setText(wyswietlacz.getText().substring(0,wyswietlacz.getText().length() -1));
System.out.println("dlugosc="+wyswietlacz.getText().length());
//jesli juz na wyswietlaczu nic nie ma
if (wyswietlacz.getText().length() <= 0)
{
wyswietlacz.setText("X");
start = true;
}
return true;
}
}
//jesli cyfra lub kropka
if ('0' <= znak && znak <= '9' || znak == '.')
{
//czy na wyswietlaczu cos juz jest
if (start)
{
//jesli nic nie ma na wyswietlaczu (poczatek)
wyswietlacz.setText(tmp);
ostatni_kl = "";
}
else
{
//jesli cos juz mamy na wyswietlaczu
wyswietlacz.setText(wyswietlacz.getText() + tmp);
ostatni_kl = "";
}
start = false;
}
//jesli znak operacji matematycznej
else
{
//jesli nic nie ma na wyswietlaczu (poczatek)
if (start)
{
operator = tmp;
ostatni_kl = tmp;
}
//jesli cos juz mamy na wyswietlaczu
else
{
//zapobiega wykonaniu obliczenia jesli klawisz znaku
//zostal zmieniony
if (ostatni_kl == "")
{
//wywoluje procedure obliczen
oblicz(Double.parseDouble(wyswietlacz.getText()));
//przepisuje znak jako aktualnie obowiazujaca do
//wykonania operacja
operator = tmp;
ostatni_kl = tmp;
start = true;
}
}
}
//kontrola();
return true;
}
/**czysci wyswietlacz, argument do obliczen, ustawia
*zmienna sygnalizujaca poczatek obliczen*/
public void czysc()
{
wyswietlacz.setText ("0");
argument = 0;
start = true;
operator = "=";
ostatni_kl = "";
//pamiec = 0;
tmp = "";
//kontrola();
}
/**dodanie wartosci do pamieci*/
public void pamiec_p()
{
pamiec += Double.parseDouble(wyswietlacz.getText());
System.out.println("M = "+pamiec);
}
/**odjecie wartosci z pamieci*/
public void pamiec_m()
{
pamiec -= (Double.parseDouble(wyswietlacz.getText()));
System.out.println("M = "+pamiec);
}
/**kasowanie pamieci*/
public void pamiec_c()
{
pamiec = 0;
System.out.println("M = "+pamiec);
}
/**odczytanie pamieci*/
public void pamiec_r()
{
wyswietlacz.setText(Double.toString(pamiec));
ostatni_kl = "";
start = false;
}
/** przekazana wartosc (n) to ostatnia wpisana wartosc*/
public void oblicz(double n)
{
//do poprzedniej wartosci ktora jest niejako w pamieci ('argument')
//musimy +,-,/,* przekazana wartosc
if (operator == "+") argument += n;
else if (operator == "-") argument -= n;
else if (operator == "*") argument *= n;
else if (operator == "/") argument /= n;
else if (operator == "=") argument = n;
//wywalamy to na ekran
wyswietlacz.setText("" + argument);
}
/* public void kontrola()
{
System.out.println("argument = "+ argument);
System.out.println("operator = '"+ operator+"'");
System.out.println("start = "+ start);
System.out.println("ostatni_kl = '"+ostatni_kl+"'");
System.out.println("pamiec = "+pamiec);
System.out.println("tmp = '"+tmp+"'");
System.out.println("");
}*/
}
/**obsluga zamkniecia okna*/
class WindowHandler implements WindowListener
{
public void windowClosing(WindowEvent event)
{
System.exit(0);
}
public void windowClosed(WindowEvent event)
{
}
public void windowOpened(WindowEvent event)
{
}
public void windowIconified(WindowEvent event)
{
}
public void windowDeiconified(WindowEvent event)
{
}
public void windowActivated(WindowEvent event)
{
}
public void windowDeactivated(WindowEvent event)
{
}
}