Я пытаюсь выяснить, как реализовать несколько кнопок в текущем коде, но после многих попыток я не могу понять это. Мне нужно сделать следующее:Java gui swing calculator операторы
Так что мой вопрос: когда я добавляю 2 числа вместе, и если они не равны 0 (например, x = 10 и y = 10), когда я нажимаю кнопку «плюс», содержимое в поле y исчезает, как я могу это исправить?
Также моя ясная кнопка не очищает все содержимое в поле x, y и result, как я могу это исправить?
Как правильно выравнивать поля x и y?
package democalc;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EtchedBorder;
class Calculator implements ActionListener {
private JFrame frame;
private JTextField xfield, yfield;
private JLabel rslt;
private JButton multiButton, clearButton, addButton, subButton, divideButton;
private JPanel xpanel, buttonPanel;
public Calculator() {
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
xpanel = new JPanel();
xpanel.setBorder(new EtchedBorder());
xpanel.setLayout(new GridLayout(3, 2));
xpanel.add(new JLabel("x ="));
xfield = new JTextField("0", 5);
xpanel.add(xfield);
xpanel.add(new JLabel("y ="));
yfield = new JTextField("0", 5);
xpanel.add(yfield);
xpanel.add(new JLabel());
rslt = new JLabel("0");
rslt.setBackground(Color.green);
rslt.setBorder(new EtchedBorder());
rslt.setOpaque(true);
xpanel.add(rslt);
frame.add(xpanel, BorderLayout.NORTH);
buttonPanel = new JPanel();
frame.add(buttonPanel, BorderLayout.CENTER);
buttonPanel.add(addButton = new JButton("+"));
addButton.addActionListener(this);
buttonPanel.add(subButton = new JButton("-"));
subButton.addActionListener(this);
buttonPanel.add(multiButton = new JButton("*"));
multiButton.addActionListener(this);
buttonPanel.add(divideButton = new JButton("/"));
divideButton.addActionListener(this);
buttonPanel.add(clearButton = new JButton("Clear"));
clearButton.addActionListener(this);
frame.pack();
frame.setVisible(true);
}
public void actionPerformed(ActionEvent event) {
int x = 0, y = 0;
try {
String xStr = xfield.getText();
x = Integer.parseInt(xStr);
}
catch (NumberFormatException e) {
// The string xStr is not a legal number.
rslt.setText("Illegal data for x.");
xfield.requestFocusInWindow();
return;
}
/* Get a number from yfield in the same way. */
try {
String yStr = yfield.getText();
y = Integer.parseInt(yStr);
}
catch (NumberFormatException e) {
rslt.setText("Illegal data for y.");
yfield.requestFocusInWindow();
return;
}
/* Perform the operation based on the action command
from the button. Note that division by zero produces
an error message. */
String op = event.getActionCommand();
if (op.equals("+"))
rslt.setText("x + y = " + (x+y));
else if (op.equals("-"))
rslt.setText("x - y = " + (x-y));
else if (op.equals("*"))
rslt.setText("x * y = " + (x*y));
else if (op.equals("/")) {
if (y == 0)
rslt.setText("ERROR");
else
rslt.setText("x/y = " + (x/y));
}
if (event.getSource() == clearButton)
xfield.setText("0");
yfield.setText("0");
}
}
Что вы хотите сказать? –
Я обновил свои вопросы и код – user3325133
* «Я обновил свои вопросы» * На этом примечании SO - это сайт Q & A, а не справочная служба. В идеале каждая тема вопроса должна иметь *** один ясный, конкретный вопрос. Другие вопросы нужно разделить на отдельные темы вопросов. –