Pierwszy program okienkowy

Odpowiedz Nowy wątek
2017-10-17 21:47

Rejestracja: 3 lata temu

Ostatnio: 2 lata temu

0

Zamieszczam fragment mojego kodu kalkulatora

public Okno() {
        super("Kalkulator");
        setSize(200,250);
        setLocation(600,200);       
        setResizable(false);        
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        setVisible(true);
        panel = new JPanel(new GridLayout(4,5));
        screen = new JLabel(" "+wynik);
        panel.add(p0);
        panel.add(p1);
        panel.add(p2);
        panel.add(p3);
        panel.add(p4);
        panel.add(p5);
        panel.add(p6);
        panel.add(p7);
        panel.add(p8);
        panel.add(p9);
        panel.add(dodaj);
        panel.add(odejmij);
        panel.add(mnoz);
        panel.add(dziel);
        panel.add(kasuj);
        panel.add(suma);
        setLayout(new BorderLayout());
        add(BorderLayout.SOUTH, panel);
        add(BorderLayout.NORTH, screen);
        p0.addActionListener(this);
        p1.addActionListener(this);
        p2.addActionListener(this);
        p3.addActionListener(this);
        p4.addActionListener(this);
        p5.addActionListener(this);
        p6.addActionListener(this);
        p7.addActionListener(this);
        p8.addActionListener(this);
        p9.addActionListener(this);
        dodaj.addActionListener(this);
        odejmij.addActionListener(this);
        mnoz.addActionListener(this);
        dziel.addActionListener(this);
        kasuj.addActionListener(this);
        suma.addActionListener(this);
    }
    @Override
    public void actionPerformed(ActionEvent e) {

        if (e.getSource()==p0) {
            screen.setText("0");
            wynik=0;        
        }
        if (e.getSource()==p1) {
            screen.setText("1");
            wynik=1;    
        }
        else if (e.getSource()==p2) {
            screen.setText("2");
            wynik=2;
        }
        else if (e.getSource()==p3) {
            screen.setText("3");
            wynik=3;            
        }
        else if (e.getSource()==p4) {
            screen.setText("4");
            wynik=4;    
        }
        else if (e.getSource()==p5) {
            screen.setText("5");
            wynik=5;    
        }
        else if (e.getSource()==p6) {
            screen.setText("6");
            wynik=6;    
        }
        else if (e.getSource()==p7) {

            wynik=(double) e.getSource();   
        screen.setText("" + wynik);
        }
        else if (e.getSource()==p8) {
            screen.setText("8");
            wynik=8;    
        }
        else if (e.getSource()==p9) {
            screen.setText("9");
            wynik=9;    
        }
        else if (e.getSource()==dodaj) {            
            pamiec=wynik;
            opcja=1;            
        }
        else if (e.getSource()==odejmij) {
            pamiec=wynik;   
            opcja=2;
        }
        else if (e.getSource()==mnoz) {
            pamiec=wynik;   
            opcja=3;
        }
        else if (e.getSource()==dziel) {
            pamiec=wynik;   
            opcja=4;
        }
        else if (e.getSource()==kasuj) {
            wynik=0;
            pamiec=0;
            screen.setText(""+wynik);
        }
        else if (e.getSource()==suma) {

            if (opcja==1) {
            wynik+=pamiec;
            screen.setText(" "+wynik+" ");
            }
            if (opcja==2) {
                wynik-=pamiec;
                screen.setText(" "+wynik+" ");
                }
            if (opcja==3) {
                wynik*=pamiec;
                screen.setText(" "+wynik+" ");
                }
            if (opcja==4) {
                wynik=pamiec/wynik;
                screen.setText(" "+wynik+" ");
                }
        }       
    }
}

W momencie kliknięcia przycisku z cyfrą np. 5 zmienna wynik ustawia się jako 5, nie wiem natomiast jak rozwiązać mój problem, gdy kliknę dwa razy przycisk z liczbą 5 zmienna wynik ustawiła się jako 55.

W tym miejscu :

else if (e.getSource()==p7) {

            wynik=(double) e.getSource();   
        screen.setText("" + wynik);
        }

próbowałem to zrobić w ten sposób ale także nie działa.

Pozostało 580 znaków

2017-10-17 22:34

Rejestracja: 4 lata temu

Ostatnio: 1 godzina temu

0

wydaje mi się, że dobrym rozwiązaniem byłoby zrobić sobie choćby ArrayList, do której przy każdym kliknięciu buttona, cyfra byłaby dodawana do ArrayListy. Potem przekazać cyfry zapisane w Array do innej zmiennej jako String i zrzutować to jako double?
Znaczy się, trochę inaczej, żeby było poprawnie ArrayList<string>, wtedy też można przekazać np. kropkę lub przecinek jako znak dla ułamków dziesiętnych.

(double) e.getSource(); nie da Tobie dwóch, czy iluśtam cyfr po kolei, double to typ prosty.
Możesz też wykorzystać proste tablice np. double[] czy int[], ale to się mija z celem, bo za każdym kliknięciem musiałbyś robić kopię takiej tablicy.


Panie Żurawiecki, projektowanie to nie jest sprzedawanie pietruszki. Do widzenia Panu.
edytowany 1x, ostatnio: trojanus, 2017-10-17 22:37

Pozostało 580 znaków

gg
2017-10-17 22:36
gg

Rejestracja: 4 lata temu

Ostatnio: 2 dni temu

Lokalizacja: Kraków

0

W Javie nie ma instrukcji switch?
https://docs.oracle.com/javas[...]java/nutsandbolts/switch.html
Chyba to lepsze niż drabinka if-ów?

Pozostało 580 znaków

2017-10-17 23:46

Rejestracja: 9 lat temu

Ostatnio: 58 sekund temu

0

Jeśli się uczysz i chcesz żeby Twoja nauka GUI nie poszła na marne to użyj Netbeans.
Jeśli pracujesz, tym bardziej.


Pozostało 580 znaków

2017-10-18 02:31
Moderator

Rejestracja: 16 lat temu

Ostatnio: 1 godzina temu

2
  1. Nie rób klas "człowiek orkiestra". Jak coś jest okienkiem to jest okienkiem a nie action listenerem
  2. Nie wpychaj wszystkich akcji do jednej biednej funkcji z milionem ifów. Zrób sobie po prostu osobne action listenery. Masz jakiś limit narzucony czy co?

Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

Odpowiedz

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