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
}
}