Привет, у меня есть этот калькулятор, и я хочу, чтобы он был пустым, как сделать ввод пользователя в текстовое поле, но я не знаю, как заставить его работать так. Я хочу упростить его так, но я не знаю, как заставить его работать без кнопок с цифрами.Калькулятор GUI без цифровых кнопок
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class MP2_2 extends JFrame implements ActionListener {
Container c;
JTextField result;
JPanel p = new JPanel();
JButton b[] = new JButton[16];
String s[] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+", "-", "/", "*", "=", "C"};
//----------------------Me------------------------
String Screen = "", monitor1 = "", monitor2 = "", OperationOnScreen = "";
boolean CommandEmpty = true, switcher = true;
double R = Integer.MIN_VALUE, L = Integer.MIN_VALUE;
//------------------------------------------------
public MP2_2() {
super("MP2_2");
c = getContentPane();
result = new JTextField();
result.setEditable(true);
p.setLayout(new GridLayout(4, 4));
for (int i = 0; i < 16; i++) {
b[i] = new JButton(s[i]);
b[i].addActionListener(this);
p.add(b[i]);
}
c.add(result, BorderLayout.NORTH);
c.add(p);
}//End Constructor
public static void main(String[] args) {
MP2_2 calcu = new MP2_2();
calcu.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
calcu.setSize(300, 300);
calcu.setVisible(true);
}
//------------------------------------------------
public void actionPerformed(ActionEvent event) {
for (int i = 0; i <= 9; i++)//Numbers
{
if (event.getSource() == b[i]) {
Screen += i;
result.setText("");
result.setText(Screen);
}
}
for (int i = 10; i <= 14; i++)//Commands
{
if (event.getSource() == b[i]) {
if (result.getText().lastIndexOf(OperationOnScreen) != -1)//prevent exception
{
result.setText(result.getText().substring(0, result.getText().lastIndexOf(OperationOnScreen)) + s[i]);
} else {
result.setText(result.getText() + s[i]);
}
OperationOnScreen = s[i];
if (switcher) {
monitor1 = s[i];
switcher = false;
} else {
monitor2 = s[i];
switcher = true;
}
if (monitor1 != monitor2 && monitor2 != "") {
if (switcher) //execute older,send sign newer
{
Calc(event, monitor1.charAt(0), monitor2);
} else {
Calc(event, monitor2.charAt(0), monitor1);
}
}
if (s[i] != "=") //calc returns 0
{
Calc(event, s[i].charAt(0), s[i]);
}
}
}
if (event.getSource() == b[15]) //Clear
{
Screen = "";
monitor1 = "";
monitor2 = "";
switcher = true;
CommandEmpty = true;
result.setText("");
}
}//end actionPerformed
public void Calc(ActionEvent event, char OpType, String Operator) {
if (Operator == "=") {
Operator = "";
}
if (CommandEmpty && Screen == "") {
return;
} else if (CommandEmpty && Screen != "") {
R = Integer.parseInt(Screen);
result.setText(Screen + Operator);
Screen = "";
CommandEmpty = false;
} else if (!CommandEmpty && Screen != "") {
L = Integer.parseInt(Screen);
R = Operations(R, L, OpType);//calculate
Screen = "";
result.setText("");
result.setText(R + Operator);
}
}//End Calc
public static double Operations(double R, double L, char op) {
switch (op) {
case '+':
return R + L;
case '-':
return R - L;
case '*':
return R * L;
case '/':
return R/L;
}
return 0;
}
}//end class
EDIT: Я думаю, что мой вопрос не ясно, извините. Я хотел, чтобы моя программа также поддерживала ввод с клавиатуры. Как мне это сделать? Поэтому я могу, наконец, удалить цифровые кнопки, как на картинке.
* ".., но я не знаю, как заставить его работать без кнопок с цифрами." * Но я не знаю, каков ваш вопрос. У вас есть вопрос? BTW. Если бы я шел по этому минималистическому GUI-пути, я бы потерял остальные кнопки и передал лот сценарию 'ScriptEngine', чтобы оценить, когда пользователь« завершает »формулу с помощью ключа ввода. –