Witam!
Napisałem sobie prosty kalkulator z wykorzystaniem swing'a. No ale jest problem z obsługą kilku zdarzeń a mianowicie chodzi tu o takie przyciski jak "plus" "minus" "równa się" etc. Tutaj zamieszczam kawałek kodu z którym nie moge sobie poradzić(Opisałem to w komentarzach).
Java:
public void actionPerformed(ActionEvent e){
String sl = ((JButton)e.getSource()).getLabel();
if(sl == "1") setNumber(1);
else if(sl == "2") setNumber(2);
else if(sl == "3") setNumber(3);
else if(sl == "4") setNumber(4);
else if(sl == "5") setNumber(5);
else if(sl == "6") setNumber(6);
else if(sl == "7") setNumber(7);
else if(sl == "8") setNumber(8);
else if(sl == "9") setNumber(9);
else if(sl == "0") setNumber(0);
else if(sl == "C"){
engine.setReady(false);
resultField.setText("0");
}
else if(sl == "+") setFunction(engine.ADD);
else if(sl == "-") setFunction(engine.SUB);
else if(sl == "/") setFunction(engine.DIV);
else if(sl == "X") setFunction(engine.MUL);
else if(sl == "="){
// TODO nie mam pojęcia :/
}
else if(sl == "+/-"){
resultField.setText(String.valueOf(-getNumber()));
}
}
private void setNumber(int n){
if(clear){
resultField.setText("");
}
if(resultField.getText().equals("0")){
resultField.setText(String.valueOf(n));
}
else{
String num = resultField.getText()+String.valueOf(n);
if(num.substring(num.length()-1) == "0"){
resultField.setText(num.substring(0,num.length()-1));
}
else{
resultField.setText(num);
}
}
clear = false;
}
private double getNumber(){
if(resultField.getText().equals("")) return 0;
else return Double.valueOf(resultField.getText());
}
private void setFunction(State op){
/* TODO
* W tej funkcji chodzi o to żeby:
* 1. Wprowadzam liczbę i wybieram operację
* 2. Wprowadzam liczbę i wybieram drugą operację
* 3. Wyświetlam poprzedni wynik i wprowadzam nastepną liczbę
* Ale: z moim kodem coś jest nie tak bo:
* Klikam np. na + to podwaja mi wartość pola engine.a
*
*/
if(engine.isReady()){
engine.setB(getNumber());
resultField.setText(String.valueOf(engine.getResult()));
engine.setReady(false);
}else{
engine.setA(getNumber());
engine.setReady(true);
}
engine.setOperation(op);
clear = true;
}
Propo przycisku "równa się":
Java:
...
else if(sl == "="){
}
....
To chodzi o to żeby:
- Wpisuje sobie liczbę.
- Wybieram sobie operację np +.
- Wybieram drugą liczbę.
- Wybieram =.
- I teraz jeśli ponownie wybiorę = to powinienem otrzymać poprzedni_wynik+druga_liczba tak jak w normalnym kalkulatorze.
Czy ktoś potrafi to rozgryźć? Podpowiedzcie jak sie za to zabrać.
pzdr.
PS. A co myślicie o zastosowaniu tutaj wzorca Stanu??. Czy on pasuje do tej aplikacji i czy ułatwi to możliwość konserwacji programu?? Cały kod jest tutaj http://www.box.net/shared/u1epi4qkk0