Java stack in GUI

Now I am studying my Diploma in programming, we have the task of creating a calculator to calculate the total, average, counter, maximum and minimum entered, cancel and clear buttons. Iโ€™ve done everything, including the cancel button, but my lecturer provided an additional loan option by adding a stack function to the cancel method. I developed how to click objects, but I'm not sure how to put the object and add the requested object to my GUI. I understand that this is not entirely necessary, but I want to do this for the rest of my life, so I try very hard. If someone can help me, my source file is below.

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(""); } } } } 

All syntax surrounded by / * * / is the original undo method.

+4
source share
1 answer

Your code:

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

should be push() instead of add() .

Then in undo() you can call dataStack.pop () and drop the object you will return with Data . (Alternative: using generics)

Then you take each of these Data members to restore the _number variable _number , etc.

EDIT:> How to scan though?

For each click of the cancel button, you need to restore (= pop ()) one data object. You can then query it for your variables and restore the DataPanel variables with them. Example:

 Data d = (Data)dataStack.pop(); _number = d._number; ... 
+3
source

Source: https://habr.com/ru/post/1396204/


All Articles