Advertisement
Guest User

Untitled

a guest
Apr 25th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.61 KB | None | 0 0
  1. /*
  2. Chapter 6: Java Calculator
  3. Programmer: Johnny Peralta
  4. Date: 4/24/2018
  5. Filename: Calculator.java
  6. Purpose: This program creates a calculator with a menu.
  7. */
  8.  
  9. import java.awt.*;
  10. import java.awt.event.*;
  11. import java.awt.datatransfer.*;
  12. import java.text.DecimalFormat;
  13. import javax.swing.JOptionPane;
  14.  
  15. public class Calculator extends Frame implements ActionListener
  16. {
  17. private Button keys[];
  18. private Panel keypad;
  19. private TextField lcd;
  20. private double op1;
  21. private boolean first;
  22. private boolean foundkey;
  23. private boolean clearText;
  24. private int lastOp;
  25. private DecimalFormat calcPattern;
  26.  
  27. public Calculator()
  28. {
  29. //creates an instance of the menu
  30. MenuBar mnuBar = new MenuBar();
  31. setMenuBar(mnuBar);
  32.  
  33. //construct and pupulate the File menu
  34. Menu mnuFile = new Menu("File", true);
  35. menuBar.add(mnuFile);
  36. MenuItem mnuFileExit = new MenuItem("Exit");
  37. mnuFile.add(mnuFileExit);
  38.  
  39. //construct and populate the Edit menu
  40. Menu mnuEdit = new Menu("Edit", true);
  41. mnu.Bar.add(mnuEdit);
  42. MenuItem mnuuEditClear = new MenuItem("Clear");
  43. mnuEdit.add(mnuEditClear);
  44. mnuEdit.insertSeperator(1);
  45. MenuItem mnuEditCopy = new MenuItem("Copy");
  46. menuEdit.add(mnuEditCopy);
  47. MenuItem mnuEditPast = new MenuItem("Paste");
  48. menuEdit.add(mnuEditPaste);
  49.  
  50. //construct and populate the About menu
  51. Menu mnuAbout = new Menu("About", true);
  52. mnuBar.add(mnuAbout);
  53. MenuItem mnuAboutCalculator = new MenuItem("About Calculator");
  54. mnuAbout.add(mnuAboutCalculator);
  55.  
  56. //add the ActionListener to each menu item
  57. mnuFileExit.addActionListener(this);
  58. mnuEditClear.addActionListener(this);
  59. mnuEditCopy.addActionListener(this);
  60. mnuEditPaste.addActionListener(this);
  61. mnuAboutCalculator.addActionListener(this);
  62.  
  63. //assign an ActionCommand to each menu item
  64. mnuFileExit.setActionCommand(this);
  65. mnuEditClear.setActionCommand(this);
  66. mnuEditCopy.setActionCommand(this);
  67. mnuEditPaste.setActionCommand(this);
  68. mnuAboutCalculator.setActionCommand(this);
  69.  
  70. //construct components and initialize beginning values
  71. lcd = new TextField(20);
  72. lcd.setEditable(false);
  73. keypad = new panel();
  74. keys = new Button(16);
  75. first = true;
  76. op1 = 0.0;
  77. clearText = true;
  78. lastOp = 0;
  79. calcPattern = new DecimalFormat("########.########");
  80.  
  81. //construct and assign captions to the Buttons
  82. for (int i=0; i<=9; i++)
  83. keys[i] = new Button(String.valueOf(i));
  84.  
  85. keys[10] = new Button("/");
  86. keys[11] = new Button("*");
  87. keys[12] = new Button("-");
  88. keys[13] = new Button("+");
  89. keys[14] = new Button("=");
  90. keys[15] = new Button(".");
  91.  
  92. //set frame and keypad layout to grid layout
  93. setLayout(new BorderLayout());
  94. keypad.setLayout(new GridLayout(4,4,10,10));
  95.  
  96. for (int i=7; i<=10; i++) //7, 8 , 9, divide
  97. keypad.add(keys[i]);
  98.  
  99. for (int i=4; i<=16; i++) //4, 5 , 6, divide
  100. keypad.add(keys[i]);
  101.  
  102. keypad.add(keys[11]); //multiply
  103.  
  104. for (int i=1; i<=3; i++) //1, 2 , 3
  105. keypad.add(keys[i]);
  106.  
  107. keypad.add(keys[12]); //subtract
  108.  
  109. keypad.add(keys[0]); //0 key
  110.  
  111. for (int i=15; i>=13; i--)
  112. keypad.add(keys[i]); // decimal point, =, add(+) keys
  113.  
  114. for (int i=0; i<keys.length; i++)
  115. keys[i].addActionListener(this);
  116.  
  117. add(lcd, BorderLayout.NORTH);
  118. add(keypad, BorderLayout.CENTER);
  119.  
  120. addWindowListener(
  121. new WindowAdapter()
  122. {
  123. public void windowClosing(WindowEvent e )
  124. {
  125. System.exit(0);
  126. }
  127. }
  128. );
  129.  
  130. } // end of constructor method
  131.  
  132. public void actionPerformed(ActionEvent e)
  133. {
  134. // test for menu item clicks
  135. String arg = e.getActionCommand();
  136. if (arg == "Exit")
  137. System.exit(0);
  138.  
  139. if (arg == "Clear")
  140. {
  141. clearText = true;
  142. first = true;
  143. op1 = 0.0;
  144. lcd.setText("");
  145. lcd.requestFocus();
  146. }
  147.  
  148. if (arg == "Copy")
  149. {
  150. Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
  151. StringSelection contents = new StringsSelection(lcd.getText());
  152. cb.setContents(contents, null);
  153. }
  154.  
  155. if (arg == "Paste")
  156. {
  157. Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
  158. Transferable content = cb.getContents(this);
  159. try
  160. {
  161. String s = (String)content.getTransferData(DataFlavor.stringFlavor);
  162. lcd.setText(calcPattern.format(Double.parseDouble(s)));
  163. }
  164. catch (Throwable exc)
  165. {
  166. lcd.setText("");
  167. }
  168. }
  169.  
  170. if (arg == "About")
  171. {
  172. String message = "Calculator ver. 1.0\nOpenExhibit Software\nCopyright 2007\nAll rights reserved";
  173. JOptionPane.showMessageDialog(null, message,"About Calculator", JOptionPane.INFORMATION_MESSAGE);
  174. }
  175.  
  176. //test for button clicks
  177. foundKey = false;
  178.  
  179. //search for the clicked key
  180. for (int i=0; i<keys.length && !foundKey; i++)
  181. {
  182. if(e.getSource() == keys[i])
  183. foundKey = true;
  184. switch(i)
  185. {
  186. //number and decimal point buttons
  187. case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 15:
  188. if(clearText)
  189. {
  190. lcd.setTexT("");
  191. clearText = false;
  192. }
  193. lcd.setText(lcd.getText() + keys[i].getLabel());
  194. break;
  195.  
  196. // operator buttons
  197. case 10: case 11: case 12: case 13: case 14:
  198.  
  199. clearText = true;
  200.  
  201. if (first) // first operand
  202. {
  203. if(lcd.getText().length()==0) op1 = 0.0;
  204. else op1 = Double.parseDouble(lcd.getText());
  205.  
  206. first = false;
  207. clearText = true;
  208. lastOp = i; // save last operator
  209. }
  210.  
  211. else // second operand
  212. {
  213. switch(lastOp)
  214. {
  215. case 10: // divide button
  216. opl /= Double.parseDouble(lcd.getText());
  217. break;
  218. case 11: // multiply button
  219. op1 *= Double.parseDouble(lcd.getText());
  220. break;
  221. case 12: // minuse button
  222. op1 -= Double.parseDouble(lcd.getText());
  223. break;
  224. case 13: // plus button
  225. op1 += Double.parseDouble(lcd.getText());
  226. break;
  227. } // end of switch(lastOp)
  228. lcd.setText(calcPattern.format(op1));
  229. clearText = True;
  230.  
  231. if(i==14) first = true; // equal button
  232. else lastOp = i; // save last operator
  233. }
  234. break;
  235. } // end of switch(i)
  236. } // end of if
  237. } // end of for
  238. } // end of action preformed
  239.  
  240. public static void main(String args[])
  241. {
  242. // set frame properties
  243. Calculator f = new Calculator();
  244. f.setTitle("Calculator Application");
  245. f.setBounds(200,200,300,300);
  246. f.setVisible(true);
  247.  
  248. // set image properties and add to frame
  249. Image icon = Toolkit.getDefaultToolkit().getImage("calcImage.gif");
  250. f.setIconImage(icon);
  251.  
  252. } // end of main
  253. } // end of class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement