Из 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()); } }); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д