import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.ComponentOrientation; import java.awt.EventQueue; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.math.BigInteger; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.util.EventListener; import javax.swing.BoxLayout; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JCheckBoxMenuItem; import javax.swing.JFrame; import javax.swing.JInternalFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JRadioButton; import javax.swing.JSeparator; import javax.swing.JTextField; import javax.swing.SwingConstants; import javax.swing.UIManager; import com.jgoodies.forms.factories.FormFactory; import com.jgoodies.forms.layout.ColumnSpec; import com.jgoodies.forms.layout.FormLayout; import com.jgoodies.forms.layout.RowSpec; import com.swtdesigner.SwingResourceManager; public class MainFrame extends JFrame { private ButtonGroup ViewMenuButtonGroup = new ButtonGroup(); private ButtonGroup RadioButtonGroup = new ButtonGroup(); private final JMenuBar menuBar = new JMenuBar(); private final JMenu editMenu = new JMenu(); private final JMenuItem MenuCopy = new JMenuItem(); private final JMenuItem MenuPaste = new JMenuItem(); private final JMenu viewMenu = new JMenu(); private final JMenuItem MenuStandard = new JMenuItem(); private final JMenuItem MenuScientific = new JMenuItem(); private final JMenuItem MenuDigitGrouping = new JMenuItem(); private final JMenu helpMenu = new JMenu(); private final JMenuItem MenuAbout = new JMenuItem(); private final JPanel panel = new JPanel(); private final JPanel panel_1 = new JPanel(); private final JPanel panel_2 = new JPanel(); private final JPanel panel_3 = new JPanel(); private final JPanel panel_4 = new JPanel(); private final JPanel panel_6 = new JPanel(); private final JPanel panel_7 = new JPanel(); private final JTextField answer = new JTextField(); private final JButton x2 = new JButton(); private final JButton b1x = new JButton(); private final JButton bpi = new JButton(); private final JButton A = new JButton(); private final JButton B = new JButton(); private final JButton C = new JButton(); private final JButton D = new JButton(); private final JButton E = new JButton(); private final JButton F = new JButton(); private final JButton X3 = new JButton(); private final JButton factorial = new JButton(); private final JButton memoryPlus = new JButton(); private final JButton b0 = new JButton(); private final JButton plusMinus = new JButton(); private final JButton decimal = new JButton(); private final JButton plus = new JButton(); private final JButton equals = new JButton(); private final JButton Int = new JButton(); private final JMenuItem MenuHex = new JMenuItem(); private final JMenuItem MenuDecimal = new JMenuItem(); private final JMenuItem MenuOctal = new JMenuItem(); private final JMenuItem MenuBinary = new JMenuItem(); private final JButton XY = new JButton(); private final JButton logButton = new JButton(); private final JButton msButton = new JButton(); private final JButton b1 = new JButton(); private final JButton b2 = new JButton(); private final JButton b3 = new JButton(); private final JButton minus = new JButton(); private final JButton lshButton = new JButton(); private final JButton Not = new JButton(); private final JButton Exp = new JButton(); private final JButton lnButton = new JButton(); private final JButton mrButton = new JButton(); private final JButton b4 = new JButton(); private final JButton b5 = new JButton(); private final JButton b6 = new JButton(); private final JButton multiply = new JButton(); private final JButton orButton = new JButton(); private final JButton Xor = new JButton(); private final JButton mcButton = new JButton(); private final JButton b7 = new JButton(); private final JButton b8 = new JButton(); private final JButton b9 = new JButton(); private final JButton divide = new JButton(); private final JButton modButton = new JButton(); private final JButton And = new JButton(); private final JRadioButton hexadecimalRadioButton = new JRadioButton(); private final JRadioButton decimalRadioButton = new JRadioButton(); private final JRadioButton octalRadioButton = new JRadioButton(); private final JRadioButton binaryRadioButton = new JRadioButton(); private final JButton Backspace = new JButton(); private final JButton CE = new JButton(); private final JButton Clear = new JButton(); private boolean readyForNextNumber = true; private String memory = "0"; private String code = "XXXXXXXXXX"; private final JMenuItem newItemMenuItem = new JMenuItem(); private final JButton prime = new JButton(); private final JButton button = new JButton(); /** * Launch the application * @param args */ public static void main(String args[]) { EventQueue.invokeLater(new Runnable() { public void run() { try { MainFrame frame = new MainFrame(); frame.setLocationRelativeTo(null); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame */ public MainFrame() { super(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); decMode(); try { jbInit(); } catch (Throwable e) { e.printStackTrace(); } // } private void jbInit() throws Exception { setTitle("Java Calculator"); final GridLayout gridLayout_5 = new GridLayout(7, 0); gridLayout_5.setVgap(2); getContentPane().setLayout(gridLayout_5); //------------------------------------------------MENU BAR DEFINITION------------------------------------------------------- setJMenuBar(menuBar); menuBar.add(editMenu); editMenu.setText("Edit"); editMenu.add(MenuCopy); MenuCopy.addActionListener(new MenuCopyActionListener()); MenuCopy.setText("Copy"); editMenu.add(MenuPaste); MenuPaste.addActionListener(new MenuPasteActionListener()); MenuPaste.setText("Paste"); menuBar.add(viewMenu); viewMenu.setText("View"); viewMenu.add(MenuStandard); MenuStandard.addActionListener(new MenuStandardActionListener()); MenuStandard.setText("Standard"); viewMenu.add(MenuScientific); MenuScientific.addActionListener(new MenuScientificActionListener()); MenuScientific.setSelected(true); MenuScientific.setText("Scientific"); viewMenu.addSeparator(); viewMenu.add(MenuHex); MenuHex.addActionListener(new MenuHexActionListener()); MenuHex.setToolTipText("Its a Hex"); MenuHex.setSelectedIcon(SwingResourceManager.getIcon(MainFrame.class, "/com/sun/java/swing/plaf/motif/icons/ScrollKnobH.gif")); MenuHex.setSelected(true); MenuHex.setDisabledSelectedIcon(SwingResourceManager.getIcon(MainFrame.class, "/com/sun/java/swing/plaf/motif/icons/ScrollKnobH.gif")); ViewMenuButtonGroup.add(MenuHex); MenuHex.setText("Hex"); viewMenu.add(MenuDecimal); MenuDecimal.addActionListener(new MenuDecimalActionListener()); MenuDecimal.setSelected(true); ViewMenuButtonGroup.add(MenuDecimal); MenuDecimal.setText("Decimal"); viewMenu.add(MenuOctal); MenuOctal.addActionListener(new MenuOctalActionListener()); ViewMenuButtonGroup.add(MenuOctal); MenuOctal.setText("Octal"); viewMenu.add(MenuBinary); MenuBinary.addActionListener(new MenuBinaryActionListener()); ViewMenuButtonGroup.add(MenuBinary); MenuBinary.setText("Binary"); viewMenu.addSeparator(); viewMenu.add(MenuDigitGrouping); MenuDigitGrouping.addActionListener(new MenuDigitGroupingActionListener()); MenuDigitGrouping.setText("Digit grouping"); menuBar.add(helpMenu); helpMenu.setText("Help"); helpMenu.add(newItemMenuItem); newItemMenuItem.addActionListener(new NewItemMenuItemActionListener()); newItemMenuItem.setText("Keyboard Shortcuts"); helpMenu.addSeparator(); helpMenu.add(MenuAbout); MenuAbout.addActionListener(new MenuAboutActionListener()); MenuAbout.setText("About Calculator"); //------------------------------------------------------------------------------------------------------------------------- getContentPane().add(panel_6); panel_6.setLayout(new BorderLayout()); panel_6.add(answer, BorderLayout.CENTER); answer.setBackground(Color.WHITE); answer.setEditable(false); answer.setFont(new Font("Arial", Font.PLAIN, 12)); answer.setHorizontalAlignment(SwingConstants.RIGHT); answer.setText("0"); answer.addKeyListener(key_handler); answer.requestFocusInWindow(); getContentPane().add(panel_4); final GridLayout gridLayout_6 = new GridLayout(0, 7); gridLayout_6.setHgap(7); panel_4.setLayout(gridLayout_6); panel_4.add(hexadecimalRadioButton); hexadecimalRadioButton.addActionListener(new HexadecimalRadioButtonActionListener()); RadioButtonGroup.add(hexadecimalRadioButton); hexadecimalRadioButton.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); hexadecimalRadioButton.setText("Hexadecimal"); panel_4.add(decimalRadioButton); decimalRadioButton.addActionListener(new DecimalRadioButtonActionListener()); RadioButtonGroup.add(decimalRadioButton); decimalRadioButton.setSelected(true); decimalRadioButton.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); decimalRadioButton.setText("Decimal"); panel_4.add(octalRadioButton); octalRadioButton.addActionListener(new OctalRadioButtonActionListener()); RadioButtonGroup.add(octalRadioButton); octalRadioButton.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); octalRadioButton.setText("Octal"); panel_4.add(binaryRadioButton); binaryRadioButton.addActionListener(new BinaryRadioButtonActionListener()); RadioButtonGroup.add(binaryRadioButton); binaryRadioButton.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); binaryRadioButton.setText("Binary"); panel_4.add(Backspace); Backspace.setToolTipText("Delete last number"); Backspace.addActionListener(new BackspaceActionListener()); Backspace.setText("Backspace"); panel_4.add(CE); CE.setToolTipText("Clears text field"); CE.addActionListener(new CEActionListener()); CE.setText("CE"); panel_4.add(Clear); Clear.setToolTipText("Start over (Clear Everything)"); Clear.addActionListener(new ClearActionListener()); Clear.setText("C"); getContentPane().add(panel_3); final GridLayout gridLayout_4 = new GridLayout(0, 9); gridLayout_4.setHgap(7); panel_3.setLayout(gridLayout_4); panel_3.add(button); button.setToolTipText("Greatest Common Denominator"); button.addActionListener(op_handler); button.setForeground(new Color(160, 82, 45)); button.setText("GCD"); panel_3.add(prime); prime.setToolTipText("Check if number is Prime"); prime.addActionListener(new PrimeActionListener()); prime.setForeground(Color.PINK); prime.setText("Prime"); panel_3.add(mcButton); mcButton.setForeground(Color.RED); mcButton.setToolTipText("Memory Clear"); mcButton.addActionListener(new McButtonActionListener()); mcButton.setText("MC"); panel_3.add(b7); b7.setText("7"); b7.addActionListener(number_handler); panel_3.add(b8); b8.setText("8"); b8.addActionListener(number_handler); panel_3.add(b9); b9.setText("9"); b9.addActionListener(number_handler); panel_3.add(divide); divide.setToolTipText("Divide"); divide.setForeground(new Color(204, 0, 255)); divide.setFont(new Font("", Font.BOLD, 16)); divide.setText("/"); divide.addActionListener(op_handler); panel_3.add(modButton); modButton.setForeground(new Color(204, 0, 255)); modButton.setToolTipText("Modulus Division"); modButton.addActionListener(op_handler); modButton.setText("Mod"); panel_3.add(And); And.setToolTipText("Bitwise AND"); And.setForeground(Color.BLUE); And.addActionListener(op_handler); And.setText("And"); getContentPane().add(panel_2); final GridLayout gridLayout_3 = new GridLayout(0, 9); gridLayout_3.setHgap(7); panel_2.setLayout(gridLayout_3); panel_2.add(Exp); Exp.setForeground(new Color(160, 82, 45)); Exp.setToolTipText("Exponential Notation"); Exp.setText("Exp"); Exp.addActionListener(op_handler); panel_2.add(lnButton); lnButton.setForeground(new Color(51, 153, 0)); lnButton.setToolTipText("Natural Log"); lnButton.addActionListener(new LnButtonActionListener()); lnButton.setText("ln"); panel_2.add(mrButton); mrButton.setForeground(Color.RED); mrButton.setToolTipText("Memory Recall"); mrButton.addActionListener(new MrButtonActionListener()); mrButton.setText("MR"); panel_2.add(b4); b4.setText("4"); b4.addActionListener(number_handler); panel_2.add(b5); b5.setText("5"); b5.addActionListener(number_handler); panel_2.add(b6); b6.setText("6"); b6.addActionListener(number_handler); panel_2.add(multiply); multiply.setToolTipText("Multiply"); multiply.setFont(new Font("", Font.BOLD, 16)); multiply.setForeground(new Color(204, 0, 255)); multiply.setText("*"); multiply.addActionListener(op_handler); panel_2.add(orButton); orButton.setToolTipText("Bitwise OR"); orButton.setForeground(Color.BLUE); orButton.addActionListener(op_handler); orButton.setText("Or"); panel_2.add(Xor); Xor.setToolTipText("Exclusive OR"); Xor.setForeground(Color.BLUE); Xor.setActionCommand("^"); Xor.addActionListener(op_handler); Xor.setText("Xor"); getContentPane().add(panel_1); final GridLayout gridLayout_2 = new GridLayout(0, 9); gridLayout_2.setHgap(7); panel_1.setLayout(gridLayout_2); panel_1.add(XY); XY.setForeground(new Color(244, 164, 96)); XY.setToolTipText("to the power of Y"); XY.setText("X^Y"); XY.addActionListener(op_handler); panel_1.add(logButton); logButton.setForeground(new Color(51, 153, 0)); logButton.setToolTipText("Log (base 10)"); logButton.addActionListener(new LogButtonActionListener()); logButton.setText("LOG"); panel_1.add(msButton); msButton.setForeground(Color.RED); msButton.setToolTipText("Memory Save"); msButton.addActionListener(new MsButtonActionListener()); msButton.setText("MS"); panel_1.add(b1); b1.setActionMap(null); b1.setText("1"); b1.addActionListener(number_handler); panel_1.add(b2); b2.setText("2"); b2.addActionListener(number_handler); panel_1.add(b3); b3.setText("3"); b3.addActionListener(number_handler); panel_1.add(minus); minus.setToolTipText("Subtract"); minus.setFont(new Font("", Font.BOLD, 16)); minus.setForeground(new Color(204, 0, 255)); minus.setText("-"); minus.addActionListener(op_handler); panel_1.add(lshButton); lshButton.setToolTipText("Left Shift"); lshButton.setForeground(Color.BLUE); lshButton.addActionListener(op_handler); lshButton.setText("Lsh"); panel_1.add(Not); Not.setToolTipText("Bitwise NOT"); Not.setForeground(Color.BLUE); Not.addActionListener(new NotActionListener()); Not.setText("Not"); getContentPane().add(panel); final GridLayout gridLayout_1 = new GridLayout(0, 9); gridLayout_1.setHgap(7); panel.setLayout(gridLayout_1); panel.add(X3); X3.setForeground(new Color(244, 164, 96)); X3.addActionListener(new X3ActionListener()); X3.setToolTipText("Cubed"); X3.setText("X^3"); panel.add(factorial); factorial.setForeground(new Color(160, 82, 45)); factorial.setToolTipText("Factorial"); factorial.addActionListener(new FactorialActionListener()); factorial.setText("n!"); panel.add(memoryPlus); memoryPlus.setForeground(Color.RED); memoryPlus.setToolTipText("Memory Add"); memoryPlus.addActionListener(new MemoryPlusActionListener()); memoryPlus.setText("M+"); panel.add(b0); b0.setText("0"); b0.addActionListener(number_handler); panel.add(plusMinus); plusMinus.setToolTipText("Positive/Negative"); plusMinus.setFont(new Font("", Font.BOLD, 16)); plusMinus.setForeground(new Color(204, 0, 255)); plusMinus.addActionListener(new PlusMinusActionListener()); plusMinus.setText("+/-"); panel.add(decimal); decimal.addActionListener(new DecimalActionListener()); decimal.setText("."); panel.add(plus); plus.setToolTipText("Add"); plus.setFont(new Font("", Font.BOLD, 16)); plus.setForeground(new Color(204, 0, 255)); plus.setText("+"); plus.addActionListener(op_handler); panel.add(equals); equals.setToolTipText("Equals"); equals.setFont(new Font("", Font.BOLD, 16)); equals.setForeground(new Color(204, 0, 255)); equals.setText("="); equals.addActionListener(op_handler); panel.add(Int); Int.setForeground(UIManager.getColor("OptionPane.errorDialog.titlePane.background")); Int.addActionListener(new IntActionListener()); Int.setToolTipText("Truncate to Integer"); Int.setText("Int"); getContentPane().add(panel_7); final GridLayout gridLayout = new GridLayout(0, 9); gridLayout.setHgap(7); panel_7.setLayout(gridLayout); panel_7.add(x2); x2.setForeground(new Color(244, 164, 96)); x2.setToolTipText("Squared"); x2.addActionListener(new X2ActionListener()); x2.setText("X^2"); panel_7.add(b1x); b1x.setForeground(new Color(160, 82, 45)); b1x.setToolTipText("One divided by 'number'"); b1x.addActionListener(new B1xActionListener()); b1x.setText("1/x"); panel_7.add(bpi); bpi.setForeground(new Color(160, 82, 45)); bpi.addActionListener(new BpiActionListener()); bpi.setText("pi"); panel_7.add(A); A.setText("A"); A.addActionListener(number_handler); panel_7.add(B); B.setText("B"); B.addActionListener(number_handler); panel_7.add(C); C.setText("C"); C.addActionListener(number_handler); panel_7.add(D); D.setText("D"); D.addActionListener(number_handler); panel_7.add(E); E.setText("E"); E.addActionListener(number_handler); panel_7.add(F); F.setText("F"); F.addActionListener(number_handler); pack(); } //-----------------------------------------------Barry's Event Handler Code----------------------------------------------------- private static final char NO_OP = '\0'; private static final char PLUS = '+'; private static final char SUBTRACT = '-'; private static final char MULTIPLY = '*'; private static final char DIVIDE = '/'; private String number1 = "0"; //private float number2 = Float.NaN; private char operator = NO_OP; private static char mode = 'd'; public String opEquals(String number) { String result; if ( operator == NO_OP ) { result = number; } else { result = performOperation(number); } operator = NO_OP; number1 = result; return result; } public String opAdd(String number) { String result; if ( operator == NO_OP ) { result = number; } else { result = performOperation(number); } operator = PLUS; number1 = result; return result; } public String opSubtract(String number) { String result; if ( operator == NO_OP ) { result = number; } else { result = performOperation(number); } operator = SUBTRACT; number1 = result; return result; } public String opMultiply(String number) { String result; if ( operator == NO_OP ) { result = number; } else { result = performOperation(number); } operator = MULTIPLY; number1 = result; return result; } public String opDivide(String number) { String result; if ( operator == NO_OP ) { result = number; } else { result = performOperation(number); } operator = DIVIDE; number1 = result; return result; } public String opExp(String number) { String result; if ( operator == NO_OP ) { result = number; } else { result = performOperation(number); } operator = 'E'; //Exp number1 = result; return result; } public String opXY(String number) { String result; if ( operator == NO_OP ) { result = number; } else { result = performOperation(number); } operator = 'X'; //X^Y number1 = result; return result; } public String opMod(String number){ String result; if(operator == NO_OP){ result = number; } else { result = performOperation(number); } operator = 'M'; number1 = result; return result; } public String opXOR(String number) { String result; if(operator == NO_OP){ result = number; } else { result = performOperation(number); } operator = '^'; number1 = result; return result; } public String opOR(String number) { String result; if(operator == NO_OP){ result = number; } else { result = performOperation(number); } operator = 'O'; number1 = result; return result; } public String opAND(String number) { String result; if(operator == NO_OP){ result = number; } else { result = performOperation(number); } operator = 'A'; number1 = result; return result; } public String opLSH(String number) { String result; if(operator == NO_OP){ result = number; } else { result = performOperation(number); } operator = 'L'; number1 = result; return result; } public String opGCD(String number) { String result; if(operator == NO_OP){ result = number; } else { result = performOperation(number); } operator = 'G'; number1 = result; return result; } private String performOperation(String number2) { String result = "0"; switch ( operator ) { case PLUS: if(mode == 'd') { result = String.valueOf(Double.parseDouble(number1) + Double.parseDouble(number2)); } else { result = String.valueOf((long)Double.parseDouble(number1) + (long)Double.parseDouble(number2)); } break; case SUBTRACT: if(mode == 'd') { result = String.valueOf(Double.valueOf(number1) - Double.valueOf(number2)); } else { result = String.valueOf((long)Double.parseDouble(number1) - (long)Double.parseDouble(number2)); } break; case MULTIPLY: if(mode == 'd') { result = String.valueOf(Double.valueOf(number1) * Double.valueOf(number2)); } else { result = String.valueOf((long)Double.parseDouble(number1) * (long)Double.parseDouble(number2)); } break; case DIVIDE: if(mode == 'd') { result = String.valueOf(Double.valueOf(number1) / Double.valueOf(number2)); } else { result = String.valueOf((long)Double.parseDouble(number1) / (long)Double.parseDouble(number2)); } break; case 'E': //only used in Decimal notation result = String.valueOf(Double.valueOf(number1) * (Math.pow(10, Double.valueOf(number2)))); break; case 'X': //X^Y if(mode == 'd') { result = String.valueOf(Math.pow(Double.parseDouble(number1), Double.parseDouble(number2))); } else { result = String.valueOf((long)Math.pow(Double.parseDouble(number1), Double.parseDouble(number2))); } break; case 'M': //Modulus Division if(mode == 'd') { result = String.valueOf(Double.valueOf(number1) % Double.valueOf(number2)); } else { result = String.valueOf((long)Double.parseDouble(number1) % (long)Double.parseDouble(number2)); } break; case '^': //XOR BigInteger num = new BigInteger(number1); BigInteger num2 = new BigInteger(number2); result = String.valueOf(num.xor(num2)); break; case 'O': //OR BigInteger num3 = new BigInteger(number1); BigInteger num4 = new BigInteger(number2); result = String.valueOf(num3.or(num4)); break; case 'A': //AND Long num5 = new Long((long)Double.parseDouble(number1)); Long num6 = new Long((long)Double.parseDouble(number2)); result = String.valueOf(num5 & num6); break; case 'L': //LSH Long myLong = new Long((long)Double.parseDouble(number1)); BigInteger num7 = new BigInteger(String.valueOf(myLong)); Integer num8 = new Integer((int)Double.parseDouble(number2)); result = String.valueOf(num7.shiftLeft(num8)); break; case 'G': //LSH BigInteger num9 = new BigInteger(number1); BigInteger num10 = new BigInteger(number2); result = String.valueOf(num9.gcd(num10)); break; } answer.requestFocusInWindow(); return result; } private class OpButtonHandler implements ActionListener { public void actionPerformed(ActionEvent event) { char operator = event.getActionCommand().charAt(0); String result = ""; String number = ""; switch ( operator ) { case '+': number = getAnswer(); number = toDecimal(number); result = opAdd(number); break; case '-': number = getAnswer(); number = toDecimal(number); result = opSubtract(number); break; case '*': number = getAnswer(); number = toDecimal(number); result = opMultiply(number); break; case '/': number = getAnswer(); number = toDecimal(number); result = opDivide(number); break; case '=': number = getAnswer(); number = toDecimal(number); result = opEquals(number); break; case 'E': number = getAnswer(); number = toDecimal(number); result = opExp(number); break; case 'X': number = getAnswer(); number = toDecimal(number); result = opXY(number); break; case 'M': number = getAnswer(); number = toDecimal(number); result = opMod(number); break; case '^': number = getAnswer(); number = toDecimal(number); result = opXOR(number); break; case 'O': number = getAnswer(); number = toDecimal(number); result = opOR(number); break; case 'A': number = getAnswer(); number = toDecimal(number); result = opAND(number); break; case 'L': number = getAnswer(); number = toDecimal(number); result = opLSH(number); break; case 'G': number = getAnswer(); number = toDecimal(number); result = opGCD(number); break; default: result = event.getActionCommand(); break; } result = toBase(result); answer.requestFocusInWindow(); answer.setText(result.toUpperCase()); readyForNextNumber = true; } } private class NumberButtonHandler implements ActionListener { public void actionPerformed(ActionEvent event) { if ( readyForNextNumber ) { answer.setText(event.getActionCommand()); readyForNextNumber = false; } else { if(mode == 'd' && Double.valueOf(getAnswer()) == 0 && !(answer.getText().contains("0."))) answer.setText(String.valueOf((event.getActionCommand().charAt(0)))); else answer.setText(answer.getText() + event.getActionCommand().charAt(0)); } answer.requestFocusInWindow(); } } public class keyHandler implements KeyListener { public void actionPerformed(ActionEvent event) { } //*********************** CHEAT CODE ***********************************************************************// public void keyPressed(KeyEvent e) { switch(e.getKeyCode()) { case KeyEvent.VK_DOWN: code = code.substring(1) + "D"; break; case KeyEvent.VK_UP: code = code.substring(1) + "U"; break; case KeyEvent.VK_LEFT: code = code.substring(1) + "L"; break; case KeyEvent.VK_RIGHT: code = code.substring(1) + "R"; break; case KeyEvent.VK_A: code = code.substring(1) + "A"; break; case KeyEvent.VK_B: code = code.substring(1) + "B"; break; case KeyEvent.VK_ENTER: if(code.equals("UUDDLRLRAB")) { panel.setBackground(Color.green); panel_1.setBackground(Color.cyan); panel_2.setBackground(Color.pink); panel_3.setBackground(Color.magenta); panel_4.setBackground(Color.red); panel_7.setBackground(Color.yellow); JOptionPane.showMessageDialog(null, "HADOUKEN!", "Konami cheat code entered", 1); code = "XXXXXXXXXX"; } break; default: code = "XXXXXXXXXX"; break; } } //********************************************************************************************************// public void keyReleased(KeyEvent e) { // TODO Auto-generated method stub } public void keyTyped(KeyEvent e) { //System.out.println(KeyEvent.VK_DOWN); switch(e.getKeyChar()) { case '1': b1.doClick(); break; case '2': b2.doClick(); break; case '3': b3.doClick(); break; case '4': b4.doClick(); break; case '5': b5.doClick(); break; case '6': b6.doClick(); break; case '7': b7.doClick(); break; case '8': b8.doClick(); break; case '9': b9.doClick(); break; case '0': b0.doClick(); break; case '+': plus.doClick(); break; case '-': minus.doClick(); break; case '*': multiply.doClick(); break; case '/': divide.doClick(); break; case '%': modButton.doClick(); break; case '^': XY.doClick(); break; case '!': factorial.doClick(); break; case '&': And.doClick(); break; case '|': orButton.doClick(); break; case '\n': equals.doClick(); break; case 8: //backspace Backspace.doClick(); break; case 27: //escape Clear.doClick(); break; case 'a': A.doClick(); break; case 'A': A.doClick(); break; case 'b': B.doClick(); break; case 'B': B.doClick(); break; case 'c': C.doClick(); break; case 'C': C.doClick(); break; case 'd': D.doClick(); break; case 'D': D.doClick(); break; case 'e': E.doClick(); break; case 'E': E.doClick(); break; case 'f': F.doClick(); break; case 'F': F.doClick(); break; case '.': decimal.doClick(); break; case '': //ctrl + O octalRadioButton.doClick(); break; case '': //ctrl + B binaryRadioButton.doClick(); break; case '': //ctrl + D decimalRadioButton.doClick(); break; case 24: //ctrl + X, AKA Cancel... hexadecimalRadioButton.doClick(); break; default: //do nothing break; } } } //------------------------------------------------------------------------------------------------------------------------------ /** * WindowBuilder generated method.
* Please don't remove this method or its invocations.
* It used by WindowBuilder to associate the {@link javax.swing.JPopupMenu} with parent. */ private static void addPopup(Component component, final JPopupMenu popup) { component.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { if (e.isPopupTrigger()) showMenu(e); } public void mouseReleased(MouseEvent e) { if (e.isPopupTrigger()) showMenu(e); } private void showMenu(MouseEvent e) { popup.show(e.getComponent(), e.getX(), e.getY()); } }); } //---------------------------------------------------Manually Added Code-------------------------------------------------------- //Integer Truncation function long truncateToInt(double d) { answer.requestFocusInWindow(); return (long)d; } //Recursive Factoring function String factor(String n) { n = toDecimal(n); if(mode == 'd') { if(Double.parseDouble(n) == 1) return "1"; else { return String.valueOf((Double.parseDouble(n) * Double.parseDouble(factor(String.valueOf(Double.parseDouble(n)-1))))); } } else { if(Double.parseDouble(n) == 1) return "1"; else { return String.valueOf(((long)Double.parseDouble(n) * (long)Double.parseDouble(factor(String.valueOf((long)Double.parseDouble(n)-1))))); } } } // Set up event handling OpButtonHandler op_handler = new OpButtonHandler(); NumberButtonHandler number_handler = new NumberButtonHandler(); keyHandler key_handler = new keyHandler(); private class MenuScientificActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { } } private class MenuStandardActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { menuStandard_actionPerformed(e); } } private class MenuHexActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { menuHex_actionPerformed(e); } } private class MenuDecimalActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { menuDecimal_actionPerformed(e); } } private class MenuOctalActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { menuOctal_actionPerformed(e); } } private class MenuBinaryActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { menuBinary_actionPerformed(e); } } private class HexadecimalRadioButtonActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { hexadecimalRadioButton_actionPerformed(e); } } private class DecimalRadioButtonActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { decimalRadioButton_actionPerformed(e); } } private class OctalRadioButtonActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { octalRadioButton_actionPerformed(e); } } private class BinaryRadioButtonActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { binaryRadioButton_actionPerformed(e); } } private class BackspaceActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { backspace_actionPerformed(e); } } private class CEActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { cE_actionPerformed(e); } } private class ClearActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { clear_actionPerformed(e); } } private class MrButtonActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { mrButton_actionPerformed(e); } } private class MsButtonActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { msButton_actionPerformed(e); } } private class McButtonActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { mcButton_actionPerformed(e); } } private class MemoryPlusActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { memoryPlus_actionPerformed(e); } } private class PlusMinusActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { plusMinus_actionPerformed(e); } } private class B1xActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { b1x_actionPerformed(e); } } private class MenuCopyActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { menuCopy_actionPerformed(e); } } private class MenuPasteActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { menuPaste_actionPerformed(e); } } private class LogButtonActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { logButton_actionPerformed(e); } } private class LnButtonActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { lnButton_actionPerformed(e); } } private class BpiActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { bpi_actionPerformed(e); } } private class FactorialActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { factorial_actionPerformed(e); } } private class X2ActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { x2_actionPerformed(e); } } private class X3ActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { x3_actionPerformed(e); } } private class IntActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { int_actionPerformed(e); } } private class DecimalActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { decimal_actionPerformed(e); } } private class MenuAboutActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { menuAbout_actionPerformed(e); } } private class NotActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { not_actionPerformed(e); } } private class MenuDigitGroupingActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { menuDigitGrouping_actionPerformed(e); } } private class NewItemMenuItemActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { newItemMenuItem_actionPerformed(e); } } private class PrimeActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { prime_actionPerformed(e); } } protected void menuStandard_actionPerformed(ActionEvent e) { StdFrame frame = new StdFrame(); frame.setLocationRelativeTo(this); frame.setVisible(true); this.setVisible(false); answer.requestFocusInWindow(); } protected void menuHex_actionPerformed(ActionEvent e) { hexadecimalRadioButton.setSelected(true); hexMode(); answer.requestFocusInWindow(); } protected void menuDecimal_actionPerformed(ActionEvent e) { decimalRadioButton.setSelected(true); decMode(); answer.requestFocusInWindow(); } protected void menuOctal_actionPerformed(ActionEvent e) { octalRadioButton.setSelected(true); octMode(); answer.requestFocusInWindow(); } protected void menuBinary_actionPerformed(ActionEvent e) { binaryRadioButton.setSelected(true); biMode(); answer.requestFocusInWindow(); } protected void hexadecimalRadioButton_actionPerformed(ActionEvent e) { hexMode(); answer.requestFocusInWindow(); } protected void decimalRadioButton_actionPerformed(ActionEvent e) { decMode(); answer.requestFocusInWindow(); } protected void octalRadioButton_actionPerformed(ActionEvent e) { octMode(); answer.requestFocusInWindow(); } protected void binaryRadioButton_actionPerformed(ActionEvent e) { biMode(); answer.requestFocusInWindow(); } //Disable buttons that do not function in different number base modes protected void hexMode() { String convert = ""; convert = toDecimal(getAnswer()); bpi.setEnabled(false); Exp.setEnabled(false); b8.setEnabled(true); b9.setEnabled(true); b7.setEnabled(true); b6.setEnabled(true); b5.setEnabled(true); b4.setEnabled(true); b3.setEnabled(true); b2.setEnabled(true); A.setEnabled(true); B.setEnabled(true); C.setEnabled(true); D.setEnabled(true); E.setEnabled(true); F.setEnabled(true); mode = 'h'; convert = toBase(convert); answer.setText(convert.toUpperCase()); } protected void decMode() { String convert = ""; convert = toDecimal(getAnswer()); A.setEnabled(false); B.setEnabled(false); C.setEnabled(false); D.setEnabled(false); E.setEnabled(false); F.setEnabled(false); Exp.setEnabled(true); bpi.setEnabled(true); b8.setEnabled(true); b9.setEnabled(true); b7.setEnabled(true); b6.setEnabled(true); b5.setEnabled(true); b4.setEnabled(true); b3.setEnabled(true); b2.setEnabled(true); mode = 'd'; convert = toBase(convert); answer.setText(convert); } protected void octMode() { String convert = ""; convert = toDecimal(getAnswer()); decMode(); bpi.setEnabled(false); Exp.setEnabled(false); b8.setEnabled(false); b9.setEnabled(false); mode = 'o'; convert = toBase(convert); answer.setText(convert); } protected void biMode() { String convert = ""; convert = toDecimal(getAnswer()); octMode(); b7.setEnabled(false); b6.setEnabled(false); b5.setEnabled(false); b4.setEnabled(false); b3.setEnabled(false); b2.setEnabled(false); mode = 'b'; convert = toBase(convert); answer.setText(convert); } protected String toDecimal(String number){ switch(mode){ case 'b': number = String.valueOf(Long.parseLong(number, 2)); break; case 'o': number = String.valueOf(Long.parseLong(number, 8)); break; case 'd': //number = String.valueOf(Long.parseLong(number, 10)); break; case 'h': number = String.valueOf(Long.parseLong(number, 16)); break; } return number; } protected String toBase(String number){ switch(mode){ case 'b': number = Long.toBinaryString((long)Double.parseDouble(number)); break; case 'o': number = Long.toOctalString((long)Double.parseDouble(number)); break; case 'd': break; case 'h': number = Long.toHexString((long)Double.parseDouble(number)); break; } return number.toUpperCase(); } //Clear All Button protected void clear_actionPerformed(ActionEvent e) { number1 = "0"; answer.setText("0"); operator = NO_OP; answer.requestFocusInWindow(); } //Clear Entry Button protected void cE_actionPerformed(ActionEvent e) { answer.setText("0"); answer.requestFocusInWindow(); } //Backspace button protected void backspace_actionPerformed(ActionEvent e) { String x = getAnswer(); if(x.length() > 1) answer.setText(x.substring(0, x.length()-1)); else if(x.length() == 1) answer.setText("0"); answer.requestFocusInWindow(); } //Memory buttons protected void mrButton_actionPerformed(ActionEvent e) { answer.setText(toBase(memory)); answer.requestFocusInWindow(); } protected void msButton_actionPerformed(ActionEvent e) { memory = toDecimal(getAnswer()); answer.requestFocusInWindow(); } protected void mcButton_actionPerformed(ActionEvent e) { memory = "0"; answer.requestFocusInWindow(); } protected void memoryPlus_actionPerformed(ActionEvent e) { if(mode == 'd') { memory = String.valueOf(Double.parseDouble(memory) + Double.parseDouble(toDecimal(getAnswer()))); } else { memory = String.valueOf((long)Double.parseDouble(memory) + (long)Double.parseDouble(toDecimal(getAnswer()))); } answer.requestFocusInWindow(); } //Sign Negation button protected void plusMinus_actionPerformed(ActionEvent e) { String num = answer.getText(); if(num.charAt(0)!='-') answer.setText("-"+num); else answer.setText(num.substring(1)); answer.requestFocusInWindow(); } //1/x button protected void b1x_actionPerformed(ActionEvent e) { { answer.setText( String.valueOf( 1 / Float.valueOf(getAnswer())) ); } answer.requestFocusInWindow(); } //Menu option: Copy protected void menuCopy_actionPerformed(ActionEvent e) { answer.selectAll(); answer.copy(); answer.requestFocusInWindow(); } //Menu option: Paste protected void menuPaste_actionPerformed(ActionEvent e) { answer.selectAll(); answer.paste(); answer.requestFocusInWindow(); } //Log button protected void logButton_actionPerformed(ActionEvent e) { answer.setText(String.valueOf( Math.log10(Float.valueOf(getAnswer())))); answer.requestFocusInWindow(); } //Ln buton (Natural log) protected void lnButton_actionPerformed(ActionEvent e) { if(mode == 'd') { answer.setText(toBase(String.valueOf( Math.log(Double.parseDouble(toDecimal(getAnswer())))))); } else { answer.setText(toBase(String.valueOf( Math.log((long)Double.parseDouble(toDecimal(getAnswer())))))); } answer.requestFocusInWindow(); } //PI button protected void bpi_actionPerformed(ActionEvent e) { answer.setText(String.valueOf(Math.PI)); answer.requestFocusInWindow(); } //Factorial button protected void factorial_actionPerformed(ActionEvent e) { if(mode == 'd') { String num = toDecimal(getAnswer()); answer.setText(toBase(factor(num))); } else { String num = String.valueOf((long)Double.parseDouble(getAnswer())); answer.setText(toBase(factor(num))); } readyForNextNumber = true; answer.requestFocusInWindow(); } //Square button protected void x2_actionPerformed(ActionEvent e) { answer.setText(String.valueOf(Double.valueOf(getAnswer()) * Double.valueOf(getAnswer()))); answer.requestFocusInWindow(); } //Cube button protected void x3_actionPerformed(ActionEvent e) { answer.setText(String.valueOf(Double.valueOf(getAnswer()) * Double.valueOf(getAnswer()) * Double.valueOf(getAnswer()))); answer.requestFocusInWindow(); } //Int button protected void int_actionPerformed(ActionEvent e) { String ans =getAnswer(); ans = String.valueOf(truncateToInt(Float.valueOf(ans))); answer.setText(ans); answer.requestFocusInWindow(); } protected void decimal_actionPerformed(ActionEvent e) { if(readyForNextNumber) { answer.setText("0."); readyForNextNumber = false; } else { if(!answer.getText().contains(".")) { answer.setText(answer.getText() + "."); } } answer.requestFocusInWindow(); } protected void menuAbout_actionPerformed(ActionEvent e) { AboutFrame aboutFrame = new AboutFrame(); aboutFrame.setLocationRelativeTo(this); aboutFrame.setVisible(true); } protected void newItemMenuItem_actionPerformed(ActionEvent e) { KeyboardShortcutsFrame kbsframe = new KeyboardShortcutsFrame(); kbsframe.setLocationRelativeTo(this); kbsframe.setVisible(true); } //NOT button protected void not_actionPerformed(ActionEvent e) { BigInteger num = new BigInteger(answer.getText()); answer.setText(toBase(toDecimal(String.valueOf(num.not())))); answer.requestFocusInWindow(); } protected void menuDigitGrouping_actionPerformed(ActionEvent e) { DecimalFormat df = new DecimalFormat(); DecimalFormatSymbols dfs = new DecimalFormatSymbols(); if(mode == 'b') { dfs.setGroupingSeparator(' '); df.getDecimalFormatSymbols(); df.setGroupingSize(4); df.setMaximumFractionDigits(0); String ans = getAnswer(); answer.setText(String.valueOf(df.format(Double.valueOf(ans)))); } else { dfs.setGroupingSeparator(','); df.setGroupingSize(3); df.setMaximumFractionDigits(12); answer.setText(String.valueOf(df.format(Double.valueOf(getAnswer())))); } answer.requestFocusInWindow(); } protected String getAnswer() { String ans = answer.getText(); ans = ans.replaceAll("[^a-zA-Z0-9.]", ""); return ans; } protected void prime_actionPerformed(ActionEvent e) { String myString = String.valueOf((long)Double.parseDouble(answer.getText())); BigInteger num = new BigInteger(myString); if(num.isProbablePrime(5)) myString = "This number is prime."; else myString = "This number is not prime."; JOptionPane.showMessageDialog(null,myString); answer.requestFocusInWindow(); } }