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