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