Стек Java в GUI - PullRequest
       4

Стек Java в GUI

4 голосов
/ 13 февраля 2012

сейчас я изучаю свой диплом по программированию, у нас есть поставленная задача - создать калькулятор для расчета суммы, среднего, счетчика, введенного максимума и минимума, кнопки отмены и кнопки очистки.Я все сделал, включая кнопку отмены, но мой лектор установил дополнительную возможность кредита, добавив функцию стека в метод отмены.Я разработал, как выдвигать объекты, но я не уверен, как вывести объект и добавить запрошенный объект в мой графический интерфейс.Я понимаю, что в этом нет необходимости, но я хочу делать это всю оставшуюся жизнь, поэтому я очень стараюсь.Если кто-нибудь сможет мне помочь, мой исходный файл будет ниже.

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

import java.util.*;
import java.io.*;

public class DataPanel extends JPanel {
    ArrayList<Data> dataStore = new ArrayList<Data>();
    Stack dataStack = new Stack(); 

    private double _number, _oldNumber;
    private double _total, _oldTotal;
    private int _count, _oldCount;
    private double _average, _oldAverage;
    private double _min, _oldMin;
    private double _max, _oldMax;

    private JTextField _inField = new JTextField();
    private JTextField _totalField = new JTextField(); 
    private JTextField _averageField = new JTextField(); 
    private JTextField _minField = new JTextField(); 
    private JTextField _maxField = new JTextField(); 
    private JTextField _countField = new JTextField(); 

    public DataPanel() {
        setLayout(new GridLayout(6, 2, 1, 1));
        add(new JLabel("Number"));
        add(_inField);
        _inField.addActionListener(new InFieldListener());

        add(new JLabel("Total"));
        add(_totalField);   
        _totalField.setEditable(false);

        add(new JLabel("Count"));
        add(_countField);
        _countField.setEditable(false);

        add(new JLabel("Average"));
        add(_averageField);
        _averageField.setEditable(false);

        add(new JLabel("Maximum"));
        add(_maxField);
        _maxField.setEditable(false);

        add(new JLabel("Minimum"));
        add(_minField);
        _minField.setEditable(false);
    }

    public void clear() {
      _total = 0;
      _count = 0;
      _average = 0;
      _max = 0;
      _min = 0;

        _inField.setText("");
        _totalField.setText("");
        _countField.setText("");
        _averageField.setText("");
        _maxField.setText("");
        _minField.setText("");
    }

    public void undo() {
       /*_number = _oldNumber;
        _total = _oldTotal;
        _count = _oldCount;
        _average = _oldAverage;
        _max = _oldMax;
        _min = _oldMin;

        _inField.setText(String.valueOf(_number));
        _totalField.setText(String.valueOf(_total));
        _countField.setText(String.valueOf(_count));
        _averageField.setText(String.valueOf(_average));
        _maxField.setText(String.valueOf(_max));
        _minField.setText(String.valueOf(_min));*/

        /*int size = dataStore.size();
        dataStore.remove(size-1);*/
    }

    private class Data {
        private Data(double _number, double _total, int _count, double _average, double _max, double _min) {
          _number = _number;
          _total = _total;
          _count = _count;
          _average = _average;
          _max = _max;
          _min = _min;
       }
   }


    private class InFieldListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            if(_inField.getText().equals("exit")) {
                System.exit(0);
            }       
            try {
                  _number = Double.parseDouble(_inField.getText());
                  _inField.setText("");

                /*_oldNumber = _number;
                _oldTotal = _total;
                _oldAverage = _average;
                _oldCount = _count;
                _oldMax = _max;
                _oldMin = _min;*/

                  _count++;

              if(_count == 1) {
                _min = _number;
                _max = _number;
              } else if(_number >= _max) {
                _max = _number;
              } else if(_number <= _min) {
                _min = _number;
              }

                  _total += _number;
                  _average = _total/_count;

              _totalField.setText(String.valueOf(_total));
             _countField.setText(String.valueOf(_count));
             _averageField.setText(String.valueOf(_average));
             _maxField.setText(String.valueOf(_max));
             _minField.setText(String.valueOf(_min));

             //dataStore.add(new Data(_number, _total, _count, _average, _max, _min));
             dataStack.add(new Data(_number, _total, _count, _average, _max, _min));

         } catch(NumberFormatException nfe) {
           System.out.println("There was a problem: " + nfe);
           _inField.setText("");
         }
        }
    }
}

Весь синтаксис, заключенный в / * * /, является исходным методом отмены.

1 Ответ

3 голосов
/ 13 февраля 2012

Ваш код:

dataStack.add(new Data(_number, _total, _count, _average, _max, _min));

должно быть push() вместо add().

Затем в undo() вы можете вызвать dataStack.pop () и привести объект, который вы получили от этого, к Data. (Альтернатива: используйте дженерики)

Затем вы убираете каждого из членов Data для восстановления переменных экземпляра _number и т. Д.

РЕДАКТИРОВАТЬ:> Как сканировать, хотя?

Для каждого нажатия на кнопку отмены вам нужно восстановить (= pop ()) один объект данных. Затем вы можете запросить его переменные и восстановить переменные DataPanel вместе с ними. Пример:

Data d = (Data)dataStack.pop();
_number = d._number;
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...