Question: Here is a Java calculator project I have done so far. The program works perfectly, but I would like to add keyboard actions. (ex: keyboard
Here is a Java calculator project I have done so far.
The program works perfectly, but I would like to add keyboard actions.
(ex: keyboard action pressed 3 and corespond the the calculator JButton three)
Code:
package calculator; import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.swing.JFrame; import javax.swing.JTextField; public class calculator extends JFrame implements ActionListener{ private static final long serialVersionUID = 1L; private static GridBagConstraints gbc = new GridBagConstraints(); JTextField numDisplay; JButton zero,one,two,three,four,five,six,seven,eight,nine, add,subtract,multiply,divide,percent,equals,clear, lastEntry,posNeg,square,backspace,fraction; String addString; String subString; String multiString; String divString; String finalString; double addDouble; double subDouble; double multiDouble; double divDouble; double finalDouble; double answer; String answerAsString; double answer_temp; double percentAsDouble; double fractionDouble; double squareRootDouble; double inverseAsDouble; JButton decimalPoint; public static double add(double num1, double num2) { return num1 + num2; } public static double subtract(double num1, double num2) { return num1 - num2; } public static double multiply(double num1, double num2) { return num1 * num2; } public static double divide(double num1, double num2) { return num1 / num2; } public void addButtonProp(int x, int y, int width) { gbc.gridx = x; gbc.gridy = y; gbc.gridwidth = width; } public calculator() { super("Calculator"); setLayout(new GridBagLayout()); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); setResizable(false); numDisplay = new JTextField(); numDisplay.setPreferredSize(new Dimension(200, 30)); numDisplay.setEditable(false); addButtonProp(0,0,5); gbc.fill = GridBagConstraints.HORIZONTAL; add(numDisplay, gbc); backspace = new JButton("Backspace"); addButtonProp(0,1,2); gbc.fill = GridBagConstraints.HORIZONTAL; add(backspace, gbc); backspace.addActionListener(this); lastEntry= new JButton("CE"); addButtonProp(3,1,1); add(lastEntry, gbc); lastEntry.addActionListener(this); clear= new JButton("C"); addButtonProp(4,1,1); add(clear, gbc); clear.addActionListener(this); seven = new JButton("7"); addButtonProp(0,2,1); add(seven, gbc); seven.addActionListener(this); eight = new JButton("8"); addButtonProp(1,2,1); add(eight, gbc); eight.addActionListener(this); nine = new JButton("9"); addButtonProp(2,2,1); add(nine, gbc); nine.addActionListener(this); divide= new JButton("/"); addButtonProp(3,2,1); add(divide, gbc); divide.addActionListener(this); square= new JButton("sqrt"); addButtonProp(4,2,1); add(square, gbc); square.addActionListener(this); four = new JButton("4"); addButtonProp(0,3,1); add(four, gbc); four.addActionListener(this); five= new JButton("5"); addButtonProp(1,3,1); add(five, gbc); five.addActionListener(this); six = new JButton("6"); addButtonProp(2,3,1); add(six, gbc); six.addActionListener(this); multiply= new JButton("*"); addButtonProp(3,3,1); add(multiply, gbc); multiply.addActionListener(this); fraction= new JButton("1/x"); addButtonProp(4,3,1); add(fraction, gbc); fraction.addActionListener(this); one = new JButton("1"); addButtonProp(0,4,1); add(one, gbc); one.addActionListener(this); two= new JButton("2"); addButtonProp(1,4,1); add(two, gbc); two.addActionListener(this); three = new JButton("3"); addButtonProp(2,4,1); add(three, gbc); three.addActionListener(this); subtract= new JButton("-"); addButtonProp(3,4,1); add(subtract, gbc); subtract.addActionListener(this); percent= new JButton("%"); addButtonProp(4,4,1); add(percent, gbc); percent.addActionListener(this); zero = new JButton("0"); addButtonProp(0,5,1); add(zero, gbc); zero.addActionListener(this); posNeg= new JButton("+/-"); addButtonProp(1,5,1); add(posNeg, gbc); posNeg.addActionListener(this); decimalPoint = new JButton("."); addButtonProp(2,5,1); add(decimalPoint, gbc); decimalPoint.addActionListener(this); add= new JButton("+"); addButtonProp(3,5,1); add(add, gbc); add.addActionListener(this); equals= new JButton("="); addButtonProp(4,5,1); add(equals, gbc); equals.addActionListener(this); } @Override public void actionPerformed(ActionEvent actionEvent){ switch (actionEvent.getActionCommand()) { case "0": numDisplay.setText(numDisplay.getText() + "0"); break; case "1": numDisplay.setText(numDisplay.getText() + "1"); break; case "2": numDisplay.setText(numDisplay.getText() + "2"); break; case "3": numDisplay.setText(numDisplay.getText() + "3"); break; case "4": numDisplay.setText(numDisplay.getText() + "4"); break; case "5": numDisplay.setText(numDisplay.getText() + "5"); break; case "6": numDisplay.setText(numDisplay.getText() + "6"); break; case "7": numDisplay.setText(numDisplay.getText() + "7"); break; case "8": numDisplay.setText(numDisplay.getText() + "8"); break; case "9": numDisplay.setText(numDisplay.getText() + "9"); break; case ".": numDisplay.setText(numDisplay.getText() + "."); String numDisplayContents = numDisplay.getText(); if (numDisplayContents.contains(".")) { decimalPoint.setEnabled(false); } break; case "+/-": inverseAsDouble= Double.parseDouble(numDisplay.getText()); if(inverseAsDouble>0) { answer_temp= -inverseAsDouble; } else if (inverseAsDouble<0) { answer_temp= Math.abs(inverseAsDouble); } else { answer_temp=inverseAsDouble; } numDisplay.setText(Double.toString(answer_temp)); break; case "+": addString = numDisplay.getText(); addDouble = Double.parseDouble(addString); numDisplay.setText(""); break; case "-": subString = numDisplay.getText(); subDouble = Double.parseDouble(subString); numDisplay.setText(""); decimalPoint.setEnabled(true); break; case "*": multiString = numDisplay.getText(); multiDouble = Double.parseDouble(multiString); numDisplay.setText(""); decimalPoint.setEnabled(true); break; case "/": divString = numDisplay.getText(); divDouble = Double.parseDouble(divString); numDisplay.setText(""); decimalPoint.setEnabled(true); break; case "=": finalString = numDisplay.getText(); finalDouble = Double.parseDouble(finalString); if (addString != null) { answer = add(addDouble, finalDouble); answerAsString = Double.toString(answer); numDisplay.setText(answerAsString); } else if (subString != null) { answer = subtract(subDouble, finalDouble); answerAsString = Double.toString(answer); numDisplay.setText(answerAsString); } else if (multiString != null) { answer = multiply(multiDouble, finalDouble); answerAsString = Double.toString(answer); numDisplay.setText(answerAsString); } else if (divString != null) { answer = divide(divDouble, finalDouble); answerAsString = Double.toString(answer); numDisplay.setText(answerAsString); } else { addString = null; subString = null; multiString = null; divString = null; } break; case "C": numDisplay.setText(""); addString = null; subString = null; multiString = null; divString = null; finalString = null; break; case "CE": numDisplay.setText(""); break; case "sqrt": squareRootDouble = Double.parseDouble(numDisplay.getText()); answer_temp = Math.sqrt(squareRootDouble); numDisplay.setText(Double.toString(answer_temp)); break; case "1/x": fractionDouble = Double.parseDouble(numDisplay.getText()); answer_temp=(1/ fractionDouble); numDisplay.setText(Double.toString(answer_temp)); break; case "%": percentAsDouble = Double.parseDouble(numDisplay.getText()); answer_temp = percentAsDouble * 0.01; numDisplay.setText(Double.toString(answer_temp)); break; case "Backspace": String str= numDisplay.getText(); str=str.substring(0,str.length()-1); numDisplay.setText(str); break; } } public static void main(String[] args) { calculator calc = new calculator(); calc.pack(); } } Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
