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();
}
}