Kalkulator w javie

0

Witam. Mam problem z określeniem działania przycisków kalkulatora, konkretnie cyfer. Otóż jestem w stanie napisać kod, który po jednokrotnym naciśnięciu przycisku "2" wyświetli w polu tekstowym "2". Ale mam problem z napisaniem kodu, który po dwukrotnym wciśnięciu przycisku "2" spowoduje wyświetlenie w polu tekstowym "22", po trzykrotnym wciśnięciu liczby 222 itd. Innym problemem jest jeszcze to, że np. gdy nacisnę przycisk "3", następnie przycisk "6" to w polu tekstowym chciałbym mieć wyświetlony tekst "36". Z konwersją Stringa z pola tekstowego na Int nie mam problemów, z rozmieszczeniem tych wszystkich elementów też sobie radzę, tylko właśnie te kilkukrotne wciśnięcie przycisków sprawia mi największy problem.

pole1 = new JTextField(20);
pole1.setEditable(false);
b1 = new JButton("1");
b2 = new JButton("2");
b3 = new JButton("3");
b4 = new JButton("4");

Określenie działania przycisków:

b1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent zdarz{
pole1.setText("1");
}
}
);
b2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent zdarz{
pole1.setText("2");
}
}
);
0

Chociażby tak (jeżeli nie chcesz się bawić inserty, etc):

//przykład dla przycisku 1.
b1.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent zdarz{
        pole1.setText(pole1.getText()+"1");
    }
});
0

prościej tak

//przykład dla przycisku 1.
b1.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent zdarz{
        pole1.append("1");
    }
});
0

ale wtedy pole1 musiałby być obiektem klasy JTextArea. JTextField nie ma takiej metody jak append.

Można też zrobić tak, aby nie tworzyć listenera dla każdego przycisku oddzielnie:

class MyListener implements ActionListener {
    public void actionPerformed(ActionEvent zdarz) {
        pole1.setText(pole1.getText()+ ((JButton)zdarz.getSource()).getText());
    }
}

i takiego listenera podpiąc do każdego przycisku.

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