Guest User

Untitled

a guest
Jul 20th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.32 KB | None | 0 0
  1. /*
  2. * To change this template, choose Tools | Templates
  3. * and open the template in the editor.
  4. */
  5.  
  6. package guicalculator;
  7. import javax.swing.JApplet;
  8. import javax.swing.JTextField;
  9. import javax.swing.JPanel;
  10. import javax.swing.JButton;
  11. import java.awt.BorderLayout;
  12. import java.awt.GridLayout;
  13. import java.awt.FlowLayout;
  14. import java.awt.event.ActionListener;
  15. import java.awt.event.ActionEvent;
  16.  
  17. /**
  18. *
  19. * @author Kevin
  20. */
  21. public class GuiCalc extends JApplet implements ActionListener{
  22. //public static final int WIDTH = 400;
  23. //public static final int HEIGHT = 400;
  24. public static final int NUMBERLIMIT = 22;
  25.  
  26. private JTextField displayField;
  27. private int result = 0;
  28. private String[] currentNumberS = new String[NUMBERLIMIT];
  29. private int currentDigit = 0;
  30. private char currentOpp = ' ';
  31.  
  32.  
  33. public void init()
  34. {
  35. setLayout(new BorderLayout());
  36.  
  37.  
  38. JButton b0 = new JButton("0");
  39. b0.addActionListener(this);
  40. JButton b1 = new JButton("1");
  41. b1.addActionListener(this);
  42. JButton b2 = new JButton("2");
  43. b2.addActionListener(this);
  44. JButton b3 = new JButton("3");
  45. b3.addActionListener(this);
  46. JButton b4 = new JButton("4");
  47. b4.addActionListener(this);
  48. JButton b5 = new JButton("5");
  49. b5.addActionListener(this);
  50. JButton b6 = new JButton("6");
  51. b6.addActionListener(this);
  52. JButton b7 = new JButton("7");
  53. b7.addActionListener(this);
  54. JButton b8 = new JButton("8");
  55. b8.addActionListener(this);
  56. JButton b9 = new JButton("9");
  57. b9.addActionListener(this);
  58.  
  59. JButton bplus = new JButton("+");
  60. bplus.addActionListener(this);
  61. JButton bmonus = new JButton("-");
  62. bmonus.addActionListener(this);
  63. JButton btimes = new JButton("*");
  64. btimes.addActionListener(this);
  65. JButton bdivide = new JButton("/");
  66. bdivide.addActionListener(this);
  67. JButton bmodulo = new JButton("%");
  68. bmodulo.addActionListener(this);
  69. JButton bsqrt = new JButton("Sqrt");
  70. bsqrt.addActionListener(this);
  71. JButton bexp = new JButton("^");
  72. bexp.addActionListener(this);
  73. JButton blog = new JButton("ilog2");
  74. blog.addActionListener(this);
  75. JButton bp = new JButton("-1");
  76. bp.addActionListener(this);
  77. JButton bs = new JButton("+1");
  78. bs.addActionListener(this);
  79. JButton breset = new JButton("Reset");
  80. breset.addActionListener(this);
  81. JButton bequals = new JButton("=");
  82. bequals.addActionListener(this);
  83.  
  84.  
  85. JPanel buttonPanel = new JPanel();
  86. buttonPanel.setLayout(new GridLayout(4,5));
  87. buttonPanel.add(b7);
  88. buttonPanel.add(b8);
  89. buttonPanel.add(b9);
  90. buttonPanel.add(bsqrt);
  91. buttonPanel.add(bs);
  92. buttonPanel.add(b4);
  93. buttonPanel.add(b5);
  94. buttonPanel.add(b6);
  95. buttonPanel.add(bmodulo);
  96. buttonPanel.add(bp);
  97. buttonPanel.add(b1);
  98. buttonPanel.add(b2);
  99. buttonPanel.add(b3);
  100. buttonPanel.add(bdivide);
  101. buttonPanel.add(blog);
  102. buttonPanel.add(b0);
  103. buttonPanel.add(bplus);
  104. buttonPanel.add(bmonus);
  105. buttonPanel.add(btimes);
  106. buttonPanel.add(bexp);
  107.  
  108. add(buttonPanel, BorderLayout.CENTER);
  109.  
  110. JPanel displayPanel = new JPanel();
  111. displayPanel.setLayout(new FlowLayout());
  112. displayField = new JTextField("", NUMBERLIMIT);
  113. displayPanel.add(displayField);
  114. displayPanel.add(breset);
  115. displayPanel.add(bequals);
  116. add(displayPanel, BorderLayout.NORTH);
  117.  
  118. displayField.setEditable(false); //Prevents the texfield from being edited by the keyboard
  119.  
  120. }
  121.  
  122. public void actionPerformed(ActionEvent e)
  123. {
  124. String buttonCommand = e.getActionCommand();
  125.  
  126. if( buttonCommand.equals("0") ) {
  127. if(currentOpp == '=')
  128. {
  129. reset();
  130. }
  131. currentNumberS[currentDigit] = "0";
  132. currentDigit++;
  133. displayField.setText(arrayToString(currentNumberS));
  134. }
  135. else if( buttonCommand.equals("1") ) {
  136. if(currentOpp == '=')
  137. {
  138. reset();
  139. }
  140. currentNumberS[currentDigit] = "1";
  141. currentDigit++;
  142. displayField.setText(arrayToString(currentNumberS));
  143. }
  144. else if( buttonCommand.equals("2") ) {
  145. if(currentOpp == '=')
  146. {
  147. reset();
  148. }
  149. currentNumberS[currentDigit] = "2";
  150. currentDigit++;
  151. displayField.setText(arrayToString(currentNumberS));
  152. }
  153. else if( buttonCommand.equals("3") ) {
  154. if(currentOpp == '=')
  155. {
  156. reset();
  157. }
  158. currentNumberS[currentDigit] = "3";
  159. currentDigit++;
  160. displayField.setText(arrayToString(currentNumberS));
  161. }
  162. else if( buttonCommand.equals("4") ) {
  163. if(currentOpp == '=')
  164. {
  165. reset();
  166. }
  167. currentNumberS[currentDigit] = "4";
  168. currentDigit++;
  169. displayField.setText(arrayToString(currentNumberS));
  170. }
  171. else if( buttonCommand.equals("5") ) {
  172. if(currentOpp == '=')
  173. {
  174. reset();
  175. }
  176. currentNumberS[currentDigit] = "5";
  177. currentDigit++;
  178. displayField.setText(arrayToString(currentNumberS));
  179. }
  180. else if( buttonCommand.equals("6") ) {
  181. if(currentOpp == '=')
  182. {
  183. reset();
  184. }
  185. currentNumberS[currentDigit] = "6";
  186. currentDigit++;
  187. displayField.setText(arrayToString(currentNumberS));
  188. }
  189. else if( buttonCommand.equals("7") ) {
  190. if(currentOpp == '=')
  191. {
  192. reset();
  193. }
  194. currentNumberS[currentDigit] = "7";
  195. currentDigit++;
  196. displayField.setText(arrayToString(currentNumberS));
  197. }
  198. else if( buttonCommand.equals("8") ) {
  199. if(currentOpp == '=')
  200. {
  201. reset();
  202. }
  203. currentNumberS[currentDigit] = "8";
  204. currentDigit++;
  205. displayField.setText(arrayToString(currentNumberS));
  206. }
  207. else if( buttonCommand.equals("9") ){
  208. if(currentOpp == '=')
  209. {
  210. reset();
  211. }
  212. currentNumberS[currentDigit] = "9";
  213. currentDigit++;
  214. displayField.setText(arrayToString(currentNumberS));
  215. }
  216.  
  217.  
  218.  
  219. else if( buttonCommand.equals("+") ) {
  220. if(currentOpp == ' ')
  221. {
  222. result = makeInt(currentNumberS);
  223. currentOpp = '+';
  224. resetCurrentNumberS();
  225. }
  226. else if(currentOpp == '=')
  227. {
  228. currentOpp = '+';
  229. resetCurrentNumberS();
  230. }
  231. else
  232. {
  233. equals();
  234. currentOpp = '+';
  235. }
  236. }
  237. else if( buttonCommand.equals("-") ) {
  238. if(currentOpp == ' ')
  239. {
  240. result = makeInt(currentNumberS);
  241. currentOpp = '-';
  242. resetCurrentNumberS();
  243. }
  244. else if(currentOpp == '=')
  245. {
  246. currentOpp = '-';
  247. resetCurrentNumberS();
  248. }
  249. else
  250. {
  251. equals();
  252. currentOpp = '-';
  253. }
  254. }
  255. else if( buttonCommand.equals("*") ) {
  256. if(currentOpp == ' ')
  257. {
  258. result = makeInt(currentNumberS);
  259. currentOpp = '*';
  260. resetCurrentNumberS();
  261. }
  262. else if(currentOpp == '=')
  263. {
  264. currentOpp = '*';
  265. resetCurrentNumberS();
  266. }
  267. else
  268. {
  269. equals();
  270. currentOpp = '*';
  271. }
  272. }
  273. else if( buttonCommand.equals("/") ) {
  274. if(currentOpp == ' ')
  275. {
  276. result = makeInt(currentNumberS);
  277. currentOpp = '/';
  278. resetCurrentNumberS();
  279. }
  280. else if(currentOpp == '=')
  281. {
  282. currentOpp = '/';
  283. resetCurrentNumberS();
  284. }
  285. else
  286. {
  287. equals();
  288. currentOpp = '/';
  289. }
  290. }
  291. else if( buttonCommand.equals("%") ) {
  292. if(currentOpp == ' ')
  293. {
  294. result = makeInt(currentNumberS);
  295. currentOpp = '%';
  296. resetCurrentNumberS();
  297. }
  298. else if(currentOpp == '=')
  299. {
  300. currentOpp = '%';
  301. resetCurrentNumberS();
  302. }
  303. else
  304. {
  305. equals();
  306. currentOpp = '%';
  307. }
  308. }
  309. else if( buttonCommand.equals("Sqrt") ) {
  310. if(currentOpp == ' ')
  311. {
  312. currentOpp = 'r';
  313. equals();
  314. }
  315. else if(currentOpp == '=' && currentDigit == 0) //currentDigit=0 means the user hasn't entered a new number yet which means they want to perform sqrt on the result from the last function.
  316. {
  317. currentOpp = 'R';
  318. equals();
  319. }
  320. else if(currentOpp == '=' && currentDigit >= 1) //currentDigit>=1 means the user has entered a new numer, so sqrt should be performed on the new number.
  321. {
  322. currentOpp = 'r';
  323. equals();
  324. }
  325. else
  326. {
  327. equals();
  328. currentOpp = 'R';
  329. equals();
  330. }
  331. }
  332. else if( buttonCommand.equals("^") ) {
  333. if(currentOpp == ' ')
  334. {
  335. result = makeInt(currentNumberS);
  336. currentOpp = 'e';
  337. resetCurrentNumberS();
  338. }
  339. else if(currentOpp == '=')
  340. {
  341. currentOpp = 'e';
  342. resetCurrentNumberS();
  343. }
  344. else
  345. {
  346. equals();
  347. currentOpp = 'e';
  348. }
  349. }
  350. else if( buttonCommand.equals("ilog2") ) {
  351. if(currentOpp == ' ')
  352. {
  353. currentOpp = 'l';
  354. equals();
  355. }
  356. else if(currentOpp == '=' && currentDigit == 0) //currentDigit=0 means the user hasn't entered a new number yet which means they want to perform log on the result from the last function.
  357. {
  358. currentOpp = 'L';
  359. equals();
  360. }
  361. else if(currentOpp == '=' && currentDigit >= 1) //currentDigit>=1 means the user has entered a new numer, so log should be performed on the new number.
  362. {
  363. currentOpp = 'l';
  364. equals();
  365. }
  366. else
  367. {
  368. equals();
  369. currentOpp = 'L';
  370. equals();
  371. }
  372. }
  373. else if( buttonCommand.equals("-1") ) {
  374. if(currentOpp == ' ')
  375. {
  376. currentOpp = 'p';
  377. equals();
  378. }
  379. else if(currentOpp == '=' && currentDigit == 0) //currentDigit=0 means the user hasn't entered a new number yet which means they want to perform p on the result from the last function.
  380. {
  381. currentOpp = 'P';
  382. equals();
  383. }
  384. else if(currentOpp == '=' && currentDigit >= 1) //currentDigit>=1 means the user has entered a new numer, so p should be performed on the new number.
  385. {
  386. currentOpp = 'p';
  387. equals();
  388. }
  389. else
  390. {
  391. equals();
  392. currentOpp = 'P';
  393. equals();
  394. }
  395. }
  396. else if( buttonCommand.equals("+1") ) {
  397. if(currentOpp == ' ')
  398. {
  399. currentOpp = 's';
  400. equals();
  401. }
  402. else if(currentOpp == '=' && currentDigit == 0) //currentDigit=0 means the user hasn't entered a new number yet which means they want to perform s on the result from the last function.
  403. {
  404. currentOpp = 'S';
  405. equals();
  406. }
  407. else if(currentOpp == '=' && currentDigit >= 1) //currentDigit>=1 means the user has entered a new numer, so s should be performed on the new number.
  408. {
  409. currentOpp = 's';
  410. equals();
  411. }
  412. else
  413. {
  414. equals();
  415. currentOpp = 'S';
  416. equals();
  417. }
  418. }
  419. else if( buttonCommand.equals("=") )
  420. equals();
  421. else if( buttonCommand.equals("Reset") )
  422. reset();
  423. else
  424. displayField.setText("Unexpected error.");
  425. }
  426.  
  427.  
  428. private void equals()
  429. {
  430. switch(currentOpp)
  431. {
  432. case '+':
  433. result = Ops.plus(result, makeInt(currentNumberS) );
  434. resetCurrentNumberS();
  435. displayField.setText(Integer.toString(result));
  436. break;
  437. case '-':
  438. result = Ops.monus(result, makeInt(currentNumberS) );
  439. resetCurrentNumberS();
  440. displayField.setText(Integer.toString(result));
  441. break;
  442. case '*':
  443. result = Ops.times(result, makeInt(currentNumberS) );
  444. resetCurrentNumberS();
  445. displayField.setText(Integer.toString(result));
  446. break;
  447. case '/':
  448. result = Ops.divide(result, makeInt(currentNumberS), 0);
  449. resetCurrentNumberS();
  450. displayField.setText(Integer.toString(result));
  451. break;
  452. case '%':
  453. result = Ops.modulo(result, makeInt(currentNumberS) );
  454. resetCurrentNumberS();
  455. displayField.setText(Integer.toString(result));
  456. break;
  457. case 'r':
  458. result = Ops.sqrt(makeInt(currentNumberS), 1);
  459. resetCurrentNumberS();
  460. displayField.setText(Integer.toString(result));
  461. break;
  462. case 'R':
  463. result = Ops.sqrt(result, 1);
  464. resetCurrentNumberS();
  465. displayField.setText(Integer.toString(result));
  466. break;
  467. case 'e':
  468. result = Ops.power(result, makeInt(currentNumberS) );
  469. resetCurrentNumberS();
  470. displayField.setText(Integer.toString(result));
  471. break;
  472. case 'l':
  473. result = Ops.log(makeInt(currentNumberS), 0);
  474. resetCurrentNumberS();
  475. displayField.setText(Integer.toString(result));
  476. break;
  477. case 'L':
  478. result = Ops.log(result, 0);
  479. resetCurrentNumberS();
  480. displayField.setText(Integer.toString(result));
  481. break;
  482. case 'p':
  483. result = Ops.p(makeInt(currentNumberS) );
  484. resetCurrentNumberS();
  485. displayField.setText(Integer.toString(result));
  486. break;
  487. case 'P':
  488. result = Ops.p(result);
  489. resetCurrentNumberS();
  490. displayField.setText(Integer.toString(result));
  491. break;
  492. case 's':
  493. result = Ops.s(makeInt(currentNumberS) );
  494. resetCurrentNumberS();
  495. displayField.setText(Integer.toString(result));
  496. break;
  497. case 'S':
  498. result = Ops.s(result);
  499. resetCurrentNumberS();
  500. displayField.setText(Integer.toString(result));
  501. break;
  502. case '=':
  503. break;
  504. default:
  505. System.out.println("Unkown Error (Caused at switch case statment).");
  506. break;
  507. }
  508. currentOpp = '=';
  509. }
  510.  
  511. private void reset()
  512. {
  513. result = 0;
  514. resetCurrentNumberS();
  515. currentOpp = ' ';
  516. displayField.setText("");
  517. }
  518.  
  519. private static String arrayToString(String[] a)
  520. {
  521. String s = a[0];
  522. int i =1;
  523. while( a[i] != null)
  524. {
  525. s = s + a[i];
  526. i++;
  527. }
  528. return s;
  529. }
  530.  
  531. private static int makeInt(String[] a)
  532. {
  533. String s = arrayToString(a);
  534. int number = Integer.parseInt(s);
  535. return number;
  536. }
  537.  
  538. private void resetCurrentNumberS()
  539. {
  540. for(int i=0; i<NUMBERLIMIT; i++)
  541. {
  542. currentNumberS[i] = null;
  543. }
  544. currentDigit = 0;
  545. }
  546. }
Add Comment
Please, Sign In to add comment