Public feed #381404

Java Calculator

public java v1 · immutable
Raw Edit
·published 2007-03-04 20:49 UTC
rendered paste body
import javax.swing.*;import java.awt.*;import java.awt.event.*;/* LAB 4 - CSE1030 - York University * Java Calculator by Niv Majar * March 4th, 2007  *  * I tried to make this as maintainable as possible, such that * anyone not familiar with the code could easily edit it. *  * As a result, I use getSource() on ActionEvent references and such. * Mostly everything but variable names can be easily changed and played around with *  * If you have questions ask me in class or send me an email * nivm at yorku */public class JavaCalculator {	public static void main(String[] args) {		JavaCalculatorMainWindow jCalc = new JavaCalculatorMainWindow();		jCalc.setVisible(true);	}}/** *  A calculator window to be added to any application. *  Supports addition, substraction, multiplication, and division. * @author Niv Majar * @version 0.1 * */class JavaCalculatorMainWindow extends JFrame {		//Final fields	public static final String DEFAULT_WINDOW_TITLE = "Java Calculator";	public static final int DEFAULT_WINDOW_WIDTH = 600;	public static final int DEFAULT_WINDOW_HEIGHT = 400;		//Fields to hold private classes	RightPanel rightPanel;	LeftPanel leftPanel;	MainMenuBar mainMenu;		public JavaCalculatorMainWindow() //Main constructor	{		super(DEFAULT_WINDOW_TITLE);		createDefaultGUI();	}		private void createDefaultGUI()  	{		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);		this.setSize(DEFAULT_WINDOW_WIDTH,DEFAULT_WINDOW_HEIGHT);		this.setLayout(new GridLayout(1,2)); //1 row, 2 columns				//Add left panel to first column:		leftPanel = new LeftPanel();		this.add(leftPanel);				//Add right panel to second column:		rightPanel = new RightPanel();		this.add(rightPanel);				//Add the main menu bar		mainMenu = new MainMenuBar();		this.setJMenuBar(mainMenu);			}		//******************************	//PRIVATE CLASSES DECLARED BELOW:	//******************************			//JPanel LeftPanel class. No event handlers needed. No outside variables.	//Initial purpose is to hold 3 text fields	private class LeftPanel extends JPanel	{		private JTextField txtInputA, txtInputB, txtResultOutput;		public LeftPanel()		{			createDefaultPanelGUI();		}				private void createDefaultPanelGUI()		{			//3 rows, 1 column. For more textfields, add more rows.			this.setLayout(new GridLayout(3,1));										//Text field A for input, size 5, at the top:			txtInputA = new JTextField(5);			txtInputA.setHorizontalAlignment(JTextField.CENTER);			txtInputA.setFont(new Font("Arial",Font.BOLD,35));						this.add(txtInputA);						//Text field B for input, size 5, at the middle:			txtInputB = new JTextField(5);			txtInputB.setHorizontalAlignment(JTextField.CENTER);			txtInputB.setFont(new Font("Arial",Font.BOLD,35));			this.add(txtInputB);						//Text field for result, size 5, at the bottom:			txtResultOutput = new JTextField(5);			txtResultOutput.setEditable(false);			txtResultOutput.setHorizontalAlignment(JTextField.CENTER);			txtResultOutput.setFont(new Font("Arial",Font.BOLD,35));			this.add(txtResultOutput);					} //end createDefaultGUI method		} //end LeftPanel class								//JPanel RightPanel class. Handles its own events. No outside variables.	//Initial purpose is to hold 4 buttons. 	private class RightPanel extends JPanel implements ActionListener 	{			private JButton btnAdd, btnSub, btnDivide, btnMultiply;				public RightPanel()		{			createDefaultPanelGUI();			registerListeners();		}				private void createDefaultPanelGUI()		{						//4 rows, 1 column. For more buttons, add more rows.			this.setLayout(new GridLayout(4,1));						//From top to bottom, add four buttons:						btnAdd = new JButton("+");			btnAdd.setFont(new Font("Arial",Font.BOLD,35));			this.add(btnAdd);						btnSub = new JButton("-");			btnSub.setFont(new Font("Arial",Font.BOLD,35));			this.add(btnSub);						btnMultiply = new JButton("*");			btnMultiply.setFont(new Font("Arial",Font.BOLD,35));			this.add(btnMultiply);						btnDivide = new JButton("/");			btnDivide.setFont(new Font("Arial",Font.BOLD,35));			this.add(btnDivide);								} //end createDefaultGUI() method				private void registerListeners()		{			btnAdd.addActionListener(this);			btnSub.addActionListener(this);			btnMultiply.addActionListener(this);			btnDivide.addActionListener(this);		}				public void actionPerformed(ActionEvent e) 		{			//Try to: Parse the data, handle events			try 			{								//Parse data:								String cmd = e.getActionCommand();				Object source = e.getSource();				double input1 = Double.valueOf(JavaCalculatorMainWindow.this.leftPanel.txtInputA.getText());				double input2 = Double.valueOf(JavaCalculatorMainWindow.this.leftPanel.txtInputB.getText());				//Keep useful references from other sources:				JTextField txtResultOutput = JavaCalculatorMainWindow.this.leftPanel.txtResultOutput;								//Handle events:								if (source == btnAdd) //Alt: cmd.equals("+")				{					double sum = input1 + input2;					txtResultOutput.setText(Double.toString(sum));				} else if (source == btnSub) //Alt: cmd.equals("-")				{					double difference = input1 - input2;					txtResultOutput.setText(Double.toString(difference));				} else if (source == btnMultiply) //Alt: cmd.equals("*")				{					double product = input1 * input2;					txtResultOutput.setText(Double.toString(product));				} else if (source == btnDivide) //Alt: cmd.equals("/")				{					double div = input1 / input2;					txtResultOutput.setText(Double.toString(div));				}							} //end try block			catch (Exception ex) 			{				String errorMsg = ex.getMessage();								if (errorMsg.equals("empty String")) //One of the two text fields are empty				{					JOptionPane.showMessageDialog(JavaCalculatorMainWindow.this,"At least one of the two text fields is empty", "Error", JOptionPane.WARNING_MESSAGE);				} else				{					JOptionPane.showMessageDialog(JavaCalculatorMainWindow.this,"Invalid inputs", "Error", JOptionPane.WARNING_MESSAGE);				}			} //end catch block			} //end actionPerformed method			}//end RightPanel class							//JMenuBar MainMenu class. Handles its own events. No outside variables.	private class MainMenuBar extends JMenuBar implements ActionListener	{				//Variables to be instantiated on new instance:		private JMenu file;		private JMenuItem clearA, clearB, clearAll, exit;				public MainMenuBar()		{				createDefaultMenu();			registerListeners();		}				private void createDefaultMenu()		{			//Add menu: File			//         --> Menu Items: Clear A, Clear B, Clear all, Exit		    file = new JMenu("File");						clearA = new JMenuItem("Clear A");			clearB = new JMenuItem("Clear B");			clearAll = new JMenuItem("Clear all");			exit = new JMenuItem("Exit");								file.add(clearA);			file.add(clearB);			file.add(clearAll);			file.add(exit);						this.add(file);		} //end createDefaultMenu method				private void registerListeners()		{			clearA.addActionListener(this);			clearB.addActionListener(this);			clearAll.addActionListener(this);			exit.addActionListener(this);		}						public void actionPerformed(ActionEvent e)		{			//Parse data			String cmd = e.getActionCommand();			Object source = e.getSource();						//Keep useful references from other sources:			JTextField txtInputA = JavaCalculatorMainWindow.this.leftPanel.txtInputA;			JTextField txtInputB = JavaCalculatorMainWindow.this.leftPanel.txtInputB;			JTextField txtResultOutput = JavaCalculatorMainWindow.this.leftPanel.txtResultOutput;						//Handle events:						if (source == clearA) //Alt: cmd.equals("Clear A")			{				txtInputA.setText(""); //Clear Input field A			} else if (source == clearB) //Alt: cmd.equals("Clear B")			{				txtInputB.setText(""); //Clear input field B			} else if (source == clearAll) //Alt: cmd.equals("Clear All")			{				txtInputA.setText(""); //Clear all text fields				txtInputB.setText("");				txtResultOutput.setText("");			} else if (source == exit) //Alt: cmd.equals("Exit")			{				System.exit(0);			}					} //end actionPerformed method	} //end MainMenu class			} //end JavaCalculatorMainWindow class