Wczoraj zamieściłem tutaj posta dotyczącego mojego kalkulatora w Javie - miałem problem z użyciem klasy final, który udało mi się rozwiązać.
Jednak chciałbym, aby ktoś teraz ten poniższy kod przekształcił tak, aby kalkulator działał (doprowadza mnie do szewskiej pasji!!!). Kod na dole jest zmodyfikowany względem starego, wiem, że znajdują się tutaj dziwne rozwiązania, ale jestem kompletnym samoukiem i czasami ciężko mi coś wymyślić (np. wciąż nie mam pojęcia do czego przydaje się możliwość stworzenia wielu klas w Javie).
A teraz opis problemu (pracuję w Eclipsie) - jak ktoś ma czas to prosiłbym o analizę:
wpisuję liczbę 13 >> naciskam "+" >> JLabel numberX przyjmuje wartość 13 >> wpisuję 15 >> naciskam "=" >> numberY wynosi 15 >> wynik 28 (wszystko idzie na razie dobrze) >> naciskam "+" >> numberX przyjmuje wartość 28 >> wpisuję 12 >> naciskam "=" >> numberX ma wartość 28, numberY 40, a wynik to 68 (i tutaj leży problem).
Z góry dziękuję!
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Color;
import java.awt.Font;
import javax.swing.DropMode;
public class App extends JFrame {
private JPanel contentPane;
private JTextField PoleTekstowe1;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
App frame = new App();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public App() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 365, 290);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
PoleTekstowe1 = new JTextField();
PoleTekstowe1.setHorizontalAlignment(SwingConstants.CENTER);
PoleTekstowe1.setFont(new Font("Tahoma", Font.PLAIN, 16));
PoleTekstowe1.setBounds(10, 10, 244, 50);
contentPane.add(PoleTekstowe1);
PoleTekstowe1.setColumns(10);
final JLabel znak = new JLabel("");
znak.setFont(new Font("Tahoma", Font.BOLD, 16));
znak.setHorizontalAlignment(SwingConstants.CENTER);
znak.setBounds(238, 10, 101, 50);
contentPane.add(znak);
final JLabel wynik = new JLabel("");
wynik.setFont(new Font("Tahoma", Font.BOLD, 15));
wynik.setForeground(Color.BLACK);
wynik.setHorizontalAlignment(SwingConstants.CENTER);
wynik.setBounds(94, 166, 101, 75);
contentPane.add(wynik);
final JButton equalsButton = new JButton("=");
equalsButton.setFont(new Font("Tahoma", Font.BOLD, 11));
equalsButton.setBounds(10, 166, 75, 75);
contentPane.add(equalsButton);
JButton plusButton = new JButton("+");
plusButton.setFont(new Font("Tahoma", Font.BOLD, 11));
plusButton.setBounds(10, 71, 75, 75);
contentPane.add(plusButton);
JButton minusButton = new JButton("-");
minusButton.setFont(new Font("Tahoma", Font.BOLD, 18));
minusButton.setBounds(94, 71, 75, 75);
contentPane.add(minusButton);
JButton timesButton = new JButton("*");
timesButton.setFont(new Font("Tahoma", Font.BOLD, 11));
timesButton.setBounds(179, 71, 75, 75);
contentPane.add(timesButton);
JButton divideButton = new JButton("/");
divideButton.setFont(new Font("Tahoma", Font.BOLD, 11));
divideButton.setBounds(264, 71, 75, 75);
contentPane.add(divideButton);
final JLabel numberX = new JLabel("");
numberX.setBounds(274, 166, 46, 14);
contentPane.add(numberX);
final JLabel numberY = new JLabel("");
numberY.setBounds(274, 196, 46, 14);
contentPane.add(numberY);
//dodawanie
plusButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
double x=Double.parseDouble(PoleTekstowe1.getText());
numberX.setText(""+x);
znak.setText("+");
equalsButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
double x = Double.parseDouble(numberX.getText());
double y = Double.parseDouble(PoleTekstowe1.getText());
double z;
z=x+y;
numberY.setText(""+y);
wynik.setText(""+z);
PoleTekstowe1.setText("" + z);
}
}
);
}
}
);
//odejmowanie
minusButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
double x=Double.parseDouble(PoleTekstowe1.getText());
numberX.setText(""+x);
znak.setText("-");
equalsButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
double x = Double.parseDouble(numberX.getText());
double y=Double.parseDouble(PoleTekstowe1.getText());
double z;
z=x-y;
numberY.setText(""+y);
wynik.setText(""+z);
PoleTekstowe1.setText("" + z);
}
}
);
}
}
);
//mnożenie
timesButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
double x=Double.parseDouble(PoleTekstowe1.getText());
numberX.setText(""+x);
znak.setText("*");
equalsButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
double y=Double.parseDouble(PoleTekstowe1.getText());
numberY.setText(""+y);
double z;
double x = Double.parseDouble(numberX.getText());
z=x*y;
wynik.setText(""+z);
PoleTekstowe1.setText("" + z);
}
}
);
}
}
);
//dzielenie
divideButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
double x=Double.parseDouble(PoleTekstowe1.getText());
numberX.setText(""+x);
znak.setText("/");
equalsButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
double y=Double.parseDouble(PoleTekstowe1.getText());
numberY.setText(""+y);
double z;
double x = Double.parseDouble(numberX.getText());
z=x/y;
wynik.setText(""+z);
PoleTekstowe1.setText("" + z);
}
}
);
}
}
);
}
}