Summary Measures
Download
.jar filesource code
Java Code
Main.java
package summarymeasures; /** * Main.java * Created by Stijn Strickx on Mar. 2 2008 * Copyright 2008 Stijn Strickx, All rights reserved */ public class Main { public static void main(String[] args) { new MeasuresWindow(); } }
Model.java
package summarymeasures; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.event.EventListenerList; /** * Model.java * Created by Stijn Strickx on Mar. 2 2008 * Copyright 2008 Stijn Strickx, All rights reserved */ public class Model { private EventListenerList listenerList; private final ChangeEvent changeEvent; public Model(){ listenerList = new EventListenerList(); changeEvent = new ChangeEvent(this); } public void addChangeListener(ChangeListener l){ listenerList.add(ChangeListener.class, l); } public void removeChangeListener(ChangeListener l){ listenerList.remove(ChangeListener.class, l); } protected void fireStateChanged() { Object[] listeners = listenerList.getListenerList(); for(int i = listeners.length-2; i>=0; i-=2){ if(listeners[i] == ChangeListener.class) ((ChangeListener)listeners[i+1]).stateChanged(changeEvent); } } }
InputModel.java
package summarymeasures; /** * InputModel.java * Created by Stijn Strickx on Mar. 2 2008 * Copyright 2008 Stijn Strickx, All rights reserved */ public class InputModel extends Model{ private String input; public InputModel(){ input = "0"; } public String getInput(){ return input; } public void addInput(String newInput){ if(input.equals("0")) input = newInput; else input += newInput; fireStateChanged(); } public void resetInput(){ input = "0"; fireStateChanged(); } }
OutputModel.java
package summarymeasures; import java.util.ArrayList; /** * OutputModel.java * Created by Stijn Strickx on Mar. 2 2008 * Copyright 2008 Stijn Strickx, All rights reserved */ public class OutputModel extends Model{ private ArrayListoutputs; private String output; private String noval; private String activeRadio; public OutputModel(){ outputs = new ArrayList (); noval = "No input available."; output = noval; activeRadio = "amount"; } public void addOutput(String input){ outputs.add(Integer.parseInt(input)); setOutput(); fireStateChanged(); } public void setNum(){ if(outputs.size()>0) output = "" + outputs.size(); else output = noval; fireStateChanged(); } public void setSum(){ if(outputs.size()>0) output = "" + getSum(); else output = noval; fireStateChanged(); } public void setAvg(){ if(outputs.size()>0) output = "" + getAvg(); else output = noval; fireStateChanged(); } public void setVar(){ double sum = 0; double avg = getAvg(); for(int x=0; x 0) output = "" + sum/(double)outputs.size(); else output = noval; fireStateChanged(); } public void setOutput() { if(activeRadio.equals("amount")){ setNum(); } else if(activeRadio.equals("sum")){ setSum(); } else if(activeRadio.equals("avg")){ setAvg(); } else{ setVar(); } } public void setActiveRadio(String active){ activeRadio = active; setOutput(); } public int getSum(){ int sum = 0; for(int num : outputs) sum+=num; return sum; } public double getAvg(){ return (double)getSum()/(double)outputs.size(); } public String getOutput(){ return output; } public void resetOutput(){ outputs.clear(); output = noval; fireStateChanged(); } }
InputField.java
package summarymeasures; import java.awt.Dimension; import javax.swing.JTextField; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; /** * InputField.java * Created by Stijn Strickx on Mar. 2 2008 * Copyright 2008 Stijn Strickx, All rights reserved */ public class InputField extends JTextField implements ChangeListener{ private InputModel model; public InputField(InputModel model){ super(model.getInput()); setEditable(false); setHorizontalAlignment(JTextField.RIGHT); setPreferredSize(new Dimension(150,20)); this.model = model; model.addChangeListener(this); } public void stateChanged(ChangeEvent e) { setText(model.getInput()); } }
InputButton.java
package summarymeasures; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; /** * InputButton.java * Created by Stijn Strickx on Mar. 2 2008 * Copyright 2008 Stijn Strickx, All rights reserved */ public class InputButton extends JButton implements ActionListener{ private InputModel inModel; private OutputModel outModel; private String text; public InputButton(InputModel inModel, OutputModel outModel, String text){ super(text); this.text = text; this.inModel = inModel; this.outModel = outModel; addActionListener(this); } public void actionPerformed(ActionEvent e) { if(text.equals("ENT")){ outModel.addOutput(inModel.getInput()); inModel.resetInput(); } else if(text.equals("DEL")){ inModel.resetInput(); outModel.resetOutput(); } else{ inModel.addInput(text); } } }
OutputField.java
package summarymeasures; import java.awt.Dimension; import javax.swing.JLabel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; /** * OutputField.java * Created by Stijn Strickx on Mar. 2 2008 * Copyright 2008 Stijn Strickx, All rights reserved */ public class OutputField extends JLabel implements ChangeListener{ private OutputModel model; public OutputField(OutputModel model){ super(model.getOutput() + " "); setHorizontalAlignment(JLabel.RIGHT); setPreferredSize(new Dimension(150,20)); this.model = model; model.addChangeListener(this); } public void stateChanged(ChangeEvent e) { setText(model.getOutput() + " "); } }
OutputRadioBtn.java
package summarymeasures; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JRadioButton; /** * OutputRadioBtn.java * Created by Stijn Strickx on Mar. 2 2008 * Copyright 2008 Stijn Strickx, All rights reserved */ public class OutputRadioBtn extends JRadioButton implements ActionListener{ private OutputModel outModel; private String text; private String actCmd; public OutputRadioBtn(OutputModel outModel, String text, String actCmd){ super(text); setActionCommand(actCmd); this.text = text; this.actCmd = actCmd; this.outModel = outModel; addActionListener(this); } public void actionPerformed(ActionEvent e) { outModel.setActiveRadio(actCmd); } }
MeasuresWindow.java
package summarymeasures; import java.awt.BorderLayout; import java.awt.Container; import java.awt.GridLayout; import javax.swing.ButtonGroup; import javax.swing.JFrame; import javax.swing.JPanel; /** * MeasuresWindow.java * Created by Stijn Strickx on Mar. 2 2008 * Copyright 2008 Stijn Strickx, All rights reserved */ public class MeasuresWindow { public MeasuresWindow(){ InputModel inModel = new InputModel(); OutputModel outModel = new OutputModel(); JPanel buttonPanel = new JPanel(); JPanel leftPanel = new JPanel(); JPanel radioPanel = new JPanel(); JPanel rightPanel = new JPanel(); buttonPanel.setLayout(new GridLayout(4,3)); leftPanel.setLayout(new BorderLayout()); radioPanel.setLayout(new GridLayout(4,1)); rightPanel.setLayout(new BorderLayout()); for(int i=1;i<=10;i++){ buttonPanel.add(new InputButton(inModel, outModel, ""+(i%10))); } buttonPanel.add(new InputButton(inModel, outModel, "ENT")); buttonPanel.add(new InputButton(inModel, outModel, "DEL")); leftPanel.add(new InputField(inModel), BorderLayout.NORTH); leftPanel.add(buttonPanel, BorderLayout.SOUTH); OutputRadioBtn[] radios = new OutputRadioBtn[4]; ButtonGroup radioGroup = new ButtonGroup(); radios[0] = new OutputRadioBtn(outModel,"amount","amount"); radios[1] = new OutputRadioBtn(outModel,"sum","sum"); radios[2] = new OutputRadioBtn(outModel,"average","avg"); radios[3] = new OutputRadioBtn(outModel,"variance","var"); radios[0].setSelected(true); for(int x=0;x