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 ArrayList outputs;
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; x0)
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
