From 5b48e82dc63f080c938d0578e5bd8e11f19c0245 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Wed, 13 Jul 2016 13:06:54 +0200 Subject: [PATCH] Added files --- src/calculator/Calc.java | 32 +++++++++++++++ src/calculator/Gui.java | 84 ++++++++++++++++++++++++++++++++++++++++ src/calculator/Main.java | 8 ++++ 3 files changed, 124 insertions(+) create mode 100644 src/calculator/Calc.java create mode 100644 src/calculator/Gui.java create mode 100644 src/calculator/Main.java diff --git a/src/calculator/Calc.java b/src/calculator/Calc.java new file mode 100644 index 0000000..c1dddc6 --- /dev/null +++ b/src/calculator/Calc.java @@ -0,0 +1,32 @@ +package calculator; + +import java.util.function.BiFunction; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class Calc { + + private static final Pattern MULTIPLY = Pattern.compile("([0-9]+)\\*([0-9]+)"); + private static final Pattern DIVIDE = Pattern.compile("([0-9]+)\\/([0-9]+)"); + private static final Pattern ADD = Pattern.compile("([0-9]+)\\+([0-9]+)"); + private static final Pattern SUBTRACT = Pattern.compile("([0-9]+)\\-([0-9]+)"); + + public static int calculate(String text) { + StringBuffer buf = new StringBuffer(text); + replace(buf, MULTIPLY, (a, b) -> a * b); + replace(buf, DIVIDE, (a, b) -> a / b); + replace(buf, ADD, (a, b) -> a + b); + replace(buf, SUBTRACT, (a, b) -> a - b); + return Integer.parseInt(buf.toString()); + } + + private static void replace(StringBuffer buf, Pattern pattern, BiFunction doit) { + while (true) { + Matcher matcher = pattern.matcher(buf.toString()); + if (!matcher.find()) + break; + buf.replace(matcher.start(), matcher.end(), Integer + .toString(doit.apply(Integer.parseInt(matcher.group(1)), Integer.parseInt(matcher.group(2))))); + } + } +} diff --git a/src/calculator/Gui.java b/src/calculator/Gui.java new file mode 100644 index 0000000..85ce52d --- /dev/null +++ b/src/calculator/Gui.java @@ -0,0 +1,84 @@ +package calculator; + +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JTextField; +import javax.swing.UIManager; +import javax.swing.UnsupportedLookAndFeelException; + +public class Gui { + private JFrame frame; + private JPanel panel; + private JTextField tf; + + public Gui() throws Exception { + frame = new JFrame(); + frame.setMinimumSize(new Dimension(200, 400)); + frame.setTitle("Calculator"); + frame.setLayout(new BorderLayout(10, 10)); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + tf = new JTextField(); + tf.setFocusable(false); + frame.add(tf, BorderLayout.NORTH); + panel = new JPanel(); + frame.add(panel, BorderLayout.CENTER); + panel.setLayout(new GridLayout(5, 3)); + String str = addNumbers(); + str += "+0-*/"; + addAppendButtons(str); + addButton('=').addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + tf.setText(Integer.toString(Calc.calculate(tf.getText()))); + } + }); + } + + public void show() { + frame.setVisible(true); + } + + public void close() { + frame.dispose(); + } + + private String addNumbers() { + String str = ""; + for (int i = 1; i < 10; i++) { + str += i; + } + return str; + } + + private void addAppendButtons(String btns) { + for (int i = 0; i < btns.length(); i++) { + Character c = btns.charAt(i); + JButton num = addButton(c); + final Character number = c; + num.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + tf.setText(tf.getText() + number); + } + }); + } + } + + private JButton addButton(Character c) { + JButton num = new JButton(); + num.setText(Character.toString(c)); + num.setFocusable(false); + panel.add(num); + return num; + } +} diff --git a/src/calculator/Main.java b/src/calculator/Main.java new file mode 100644 index 0000000..63de50a --- /dev/null +++ b/src/calculator/Main.java @@ -0,0 +1,8 @@ +package calculator; + +public class Main { + public static void main(String[] args) throws Exception { + Gui gui = new Gui(); + gui.show(); + } +}