Tworzenie obiektu po wciśnięciu przycisku.

0

Witam. Jako, że jestem totalnie początkujący jeśli chodzi o jave to i problem zapewne dla niektórych może wydać się równie banalny.
Otóż chciałem napisać prosty kalkulator korzystając ze swinga. Kalkulator ma wykonywać operacje na ułamkach i klasę do nich już posiadam. Problem pojawia się przy tworzeniu obiektów.
Cały projekt składa się z 3 głównych klas: Main, GUI i Ratacial(klasa wykonująca operacje na ułamkach).
W ostatniej funkcji 'licz', która w założeniu ma tworzyć dwa różne obiekty odpowiadające składnikom sumy(na razie) dzieje się dziwna rzecz... po wprowadzeniu jakiegoś ułamka np. 2/3 i naciśnięciu na przycisk '+' w obiekcie r1 zapisane są liczny 2 i 3, a w obiekcie r2 = null czyli okej, ale po wpisaniu następnego składnika, np 1/3 i wciśnięciu przycisku '=' obiekt r1 nie wiedzieć czemu wskazuje na nulla a r2 ma wartości 1/3. Domyślam się, że jest jakieś proste rozwiązanie tego problemu ale mi po paru godzinac siedzenia i kombinowania nic nie wyszło. Z góry dziękuję za pomoc. Pozdrawiam


public class GUI{

    Rational r1 = null;
    Rational r2 = null;

    JPanel panel1;
    JPanel panel2;

    JButton plus;
    JButton minus;
    JButton razy;
    JButton podzielic;
    JButton wynik;

    private JTextArea poleTxt;

    private String liczba;
    String znak = null;

    private boolean czyJestSkladnikPierwszy = false;
    boolean rownaSie = false;

    public void tworzGUI(){

    JFrame ramka = new JFrame();
    ramka.setSize(400, 250);
    ramka.setVisible(true);
    //ramka.setResizable(false);

    panel1 = new JPanel();
    panel2 = new JPanel();

    Font f = new Font("Verdana", Font.CENTER_BASELINE, 12);

        poleTxt = new JTextArea(1,20);
        poleTxt.setFont(f);
    panel1.add(poleTxt);

    plus = new JButton("+");
    plus.addActionListener(new PlusListener());

    minus = new JButton("-");
    minus.addActionListener(new MinusListener());

    razy = new JButton("*");
    razy.addActionListener(new RazyListener());

    podzielic= new JButton("/");
    podzielic.addActionListener(new PodzielicListener());

    wynik = new JButton("=");
    wynik.setPreferredSize(new Dimension(45, 35));
    wynik.addActionListener(new WynikListener());

    panel2.add(plus);
    panel2.add(minus);
    panel2.add(razy);
    panel2.add(podzielic);
    panel2.add(wynik);

    panel1.setLayout(new FlowLayout(FlowLayout.CENTER , 5, 20));
    panel2.setLayout(new FlowLayout(FlowLayout.LEFT ,13, 20));

    ramka.getContentPane().add(BorderLayout. NORTH, panel1);
    ramka.getContentPane().add(BorderLayout. SOUTH, panel2);
}

    class PlusListener implements ActionListener{
        public void actionPerformed(ActionEvent zdarzenie){
            znak = "+";
            liczba = poleTxt.getText();
            poleTxt.setText("");
            formatujNaLiczby(liczba, znak);
        }
    }
    class MinusListener implements ActionListener{
        public void actionPerformed(ActionEvent zdarzenie){
            znak = "-";
            liczba = poleTxt.getText();
            poleTxt.setText("");
            formatujNaLiczby(liczba, znak);
        }
    }
    class RazyListener implements ActionListener{
        public void actionPerformed(ActionEvent zdarzenie){
            znak = "*";
            liczba = poleTxt.getText();
            poleTxt.setText("");
            formatujNaLiczby(liczba, znak);
        }
    }
    class PodzielicListener implements ActionListener{
        public void actionPerformed(ActionEvent zdarzenie){
            znak = "/";
            liczba = poleTxt.getText();
            poleTxt.setText("");
            formatujNaLiczby(liczba, znak);
        }
    }
    class WynikListener implements ActionListener{
        public void actionPerformed(ActionEvent zdarzenie){
                        znak = "=";
            rownaSie = true;
            liczba = poleTxt.getText();
            poleTxt.setText("=");
            formatujNaLiczby(liczba, znak);
        }
    }

    public void formatujNaLiczby(String ulamek, String znak){

        int licznik_liczba = 0;
        int mianownik_liczba = 0;

        StringTokenizer st = new StringTokenizer(ulamek, "/");

        while (st.hasMoreTokens())
        {
             licznik_liczba = Integer.parseInt( st.nextToken() );
             mianownik_liczba = Integer.parseInt( st.nextToken() );
        }

        licz(licznik_liczba, mianownik_liczba, znak);

    }

    public void licz(int licznik, int mianownik, String znak){

            if (znak != "="){
            r1 = new Rational(licznik, mianownik);
            }
            if(znak == "=") {
        r2 = new Rational(licznik, mianownik);
        }
        System.out.println(r1);
        System.out.println(r2);  //tu pojawia się problem

    }
    }
0

Nie analizowałem całego kodu , ale równość Stringów sprawdza się tak:

if(znak.equals("="))

Porównanie znak=="=" sprawdza równość referencji , a nie równość zawartości Stringów.

0

faktycznie... przyzwyczajenia z c++ ;)
Jednak to nie to. Ciągle ten sam problem niestety.

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