Из jTextField пример присвоить переменной - Java
Формулировка задачи:
Добрый день.
Предположим у нас есть переменная, в которой производим вычисления:
double rez = 0;
rez = 5+3-8/2^2;
Ответ выводим в jLabel9
jLabel9.setText(jLabel9.getText()+rez+""); // Ответ: 6
На форме имеется текстовое поле (jTextField1), куда вводим пример (типа 5+3-8/2^2).
Как нам извлечь из этого поля пример (для его вычисления) и результат записать в jLabel1?
Срочно надо. Спасибо заранее.
Решение задачи: «Из jTextField пример присвоить переменной»
textual
Листинг программы
package org.***;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
/**
* Created by ****.
*/
public class MainFrame extends JFrame {
JLabel label;
JTextArea textArea;
JButton button;
public MainFrame() {
super ("Экран");
setBounds(500,500,300,300);
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
label = new JLabel("Введите формулу");
textArea = new JTextArea();
button = new JButton("BUTTON");
add(label, BorderLayout.NORTH);
add(textArea, BorderLayout.CENTER);
add(button, BorderLayout.SOUTH);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//тут храним строку, взятую из JTextArea
String s = textArea.getText();
//здесь храним "отпарсенную" строку поэлементно
java.util.List equation = new ArrayList<>();
//строковая переменная состояния
String state = "START";
//временная переменная для записи чисел
double current = 42;
//начинаем парсить строку
for (int i = 0; i < s.length(); i++){
switch (state){
case "START":
//если текущий элемент строки - число то записываем его во временную перемнную
if ((s.substring(i, i+1).equals("0"))||(s.substring(i, i+1).equals("1"))||(s.substring(i, i+1).equals("2"))||
(s.substring(i, i+1).equals("3"))||(s.substring(i, i+1).equals("4"))||(s.substring(i, i+1).equals("5"))||
(s.substring(i, i+1).equals("6"))||(s.substring(i, i+1).equals("7"))||(s.substring(i, i+1).equals("8"))||
(s.substring(i, i+1).equals("9"))){
current = Double.parseDouble(s.substring(i, i+1));
state = "NUMBER";
}
//иначе если элемент + - * /, то сразу пишем его в equation
else if ((s.substring(i, i+1).equals("+"))||(s.substring(i, i+1).equals("-"))||
(s.substring(i, i+1).equals("*"))||(s.substring(i, i+1).equals("/"))){
equation.add(s.substring(i, i+1));
}
break;
case "NUMBER":
//в случае, если мы в состоянии "NUMBER", то мы либо продолжаем парсить число в current
//если опять пришло число
if ((s.substring(i, i+1).equals("0"))||(s.substring(i, i+1).equals("1"))||(s.substring(i, i+1).equals("2"))||
(s.substring(i, i+1).equals("3"))||(s.substring(i, i+1).equals("4"))||(s.substring(i, i+1).equals("5"))||
(s.substring(i, i+1).equals("6"))||(s.substring(i, i+1).equals("7"))||(s.substring(i, i+1).equals("8"))||
(s.substring(i, i+1).equals("9"))){
current = current * 10 + Double.parseDouble(s.substring(i, i+1));
}
//иначе если элемент + - * /, то записываем в equation и число и знак
else if ((s.substring(i, i+1).equals("+"))||(s.substring(i, i+1).equals("-"))||
(s.substring(i, i+1).equals("*"))||(s.substring(i, i+1).equals("/"))){
equation.add(current);
equation.add(s.substring(i, i+1));
state = "START";
}
break;
}
}
//для записи последнего элемента
if (state.equals("NUMBER")) {
equation.add(current);
}
/*распарсили строку, теперь начинаем расчет
сначала ищем все умножения и деления, потом сложения и вычитания*/
//анализ "*"; "/"
for (int i = 0; i < equation.size(); i++){
if (equation.get(i).equals("*")){
//упростили ( элементы массива a1; "*"; b1; = a2; null, null, где a2 = a1 * b1)
equation.set(i-1, (Double)equation.get(i-1)*(Double)equation.get(i+1));
//удаляем лишнее и сдвигаем последующие элементы
for (int j = i; j < equation.size()-2; j++){
equation.set(j, equation.get(j+2));
}
equation.remove(equation.size()-1);
equation.remove(equation.size()-1);
i--;
}
if (equation.get(i).equals("/")){
equation.set(i-1, (Double)equation.get(i-1)/(Double)equation.get(i+1));
//удаляем лишнее и сдвигаем последующие элементы
for (int j = i; j < equation.size()-2; j++){
equation.set(j, equation.get(j+2));
}
equation.remove(equation.size()-1);
equation.remove(equation.size()-1);
i--;
}
}
//теперь операции с меньшим приоритетом: "+"; "-"
for (int i = 0; i < equation.size(); i++){
if (equation.get(i).equals("+")){
equation.set(i-1, (Double)equation.get(i-1)+(Double)equation.get(i+1));
//удаляем лишнее и сдвигаем последующие элементы
for (int j = i; j < equation.size()-2; j++){
equation.set(j, equation.get(j+2));
}
equation.remove(equation.size()-1);
equation.remove(equation.size()-1);
i--;
}
if (equation.get(i).equals("-")){
equation.set(i-1, (Double)equation.get(i-1)-(Double)equation.get(i+1));
//удаляем лишнее и сдвигаем последующие элементы
for (int j = i; j < equation.size()-2; j++){
equation.set(j, equation.get(j+2));
}
equation.remove(equation.size()-1);
equation.remove(equation.size()-1);
i--;
}
}
label.setText(equation.get(0).toString());
}
});
}
}