From d4fa8a35ba62981c95afaf7b2f1fbcf70d65744d Mon Sep 17 00:00:00 2001 From: obai Date: Sun, 8 Sep 2024 21:09:56 +0200 Subject: [PATCH] Taschenrechner --- .../Übungen/TaschenrechnerGUI/Controller.java | 240 +++++++++--------- .../Übungen/TaschenrechnerGUI/JunitTest.java | 10 +- .../src/Übungen/TaschenrechnerGUI/View.java | 63 ++++- .../src/Übungen/TicTac/Controller.java | 1 + 4 files changed, 183 insertions(+), 131 deletions(-) diff --git a/Programmierung2/src/Übungen/TaschenrechnerGUI/Controller.java b/Programmierung2/src/Übungen/TaschenrechnerGUI/Controller.java index ba37064..0fe8724 100644 --- a/Programmierung2/src/Übungen/TaschenrechnerGUI/Controller.java +++ b/Programmierung2/src/Übungen/TaschenrechnerGUI/Controller.java @@ -3,128 +3,104 @@ package Übungen.TaschenrechnerGUI; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import javax.swing.JButton; + public class Controller implements ActionListener { - Modell m1; - View v1; - String letzterText = ""; - char operationen[] = {'+', '-','*','÷'}; + Modell m1; + View v1; + + String letzterText = ""; + char operationen[] = { '+', '-', 'x', '÷' }; char merker = ' '; String erst = ""; - String last = ""; - Integer zahl1; - Integer zahl2; - - - public Controller(Modell m1, View v1) { - this.m1 = m1; - this.v1 = v1; - getButtons(); - - } + String last = ""; + Number zahl1; + Number zahl2; - public void getButtons() { - ActionListener actionListener = new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - letzterText = v1.eingabe.getText(); - - if (e.getSource() == v1.button1) - v1.eingabe.setText(letzterText + v1.button1.getText()); - - if (e.getSource() == v1.button2) - v1.eingabe.setText(letzterText + v1.button2.getText()); - - if (e.getSource() == v1.button3) - v1.eingabe.setText(letzterText + v1.button3.getText()); - - if (e.getSource() == v1.button4) - v1.eingabe.setText(letzterText + v1.button4.getText()); - - if (e.getSource() == v1.button5) - v1.eingabe.setText(letzterText + v1.button5.getText()); - - if (e.getSource() == v1.button1) - v1.eingabe.setText(letzterText + v1.button1.getText()); - - if (e.getSource() == v1.button6) - v1.eingabe.setText(letzterText + v1.button6.getText()); - - if (e.getSource() == v1.button7) - v1.eingabe.setText(letzterText + v1.button7.getText()); - - if (e.getSource() == v1.button8) - v1.eingabe.setText(letzterText + v1.button8.getText()); - - if (e.getSource() == v1.button9) - v1.eingabe.setText(letzterText + v1.button9.getText()); - - if (e.getSource() == v1.button0) - v1.eingabe.setText(letzterText + v1.button0.getText()); - - if (e.getSource() == v1.punkt) - v1.eingabe.setText(letzterText + v1.punkt.getText()); - - if (e.getSource() == v1.plus) - v1.eingabe.setText(letzterText + v1.plus.getText()); - - if (e.getSource() == v1.minus) - v1.eingabe.setText(letzterText + v1.minus.getText()); - - if (e.getSource() == v1.multi) - v1.eingabe.setText(letzterText + v1.multi.getText()); - - if (e.getSource() == v1.divid) - v1.eingabe.setText(letzterText + v1.divid.getText()); - - if (e.getSource() == v1.berechnen) { - checkeOperator(); - textverteilen(); - textToNumber(); - if (merker != ' ') - if (merker == '+') { - int ergebnisse = (int) m1.add(zahl1, zahl2); - v1.updateErgebnisse(ergebnisse); - } + public Controller(Modell m1, View v1) { + this.m1 = m1; + this.v1 = v1; + getButtons(); + } - else if (merker == '-') { - int ergebnisse = (int) m1.sub(zahl1, zahl2); - v1.updateErgebnisse(ergebnisse); - } + public void getButtons() { + ActionListener actionListener = new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + letzterText = v1.eingabe.getText(); + String speicher = ""; + JButton clickedButton; - else if (merker == '*') { - int ergebnisse = (int) m1.multi(zahl1, zahl2); - v1.updateErgebnisse(ergebnisse); - } + if (e.getSource() == v1.button1 || e.getSource() == v1.button2 || e.getSource() == v1.button3 + || e.getSource() == v1.button4 || e.getSource() == v1.button5 || e.getSource() == v1.button6 + || e.getSource() == v1.button7 || e.getSource() == v1.button8 || e.getSource() == v1.button9 + || e.getSource() == v1.button0 || e.getSource() == v1.plus || e.getSource() == v1.minus + || e.getSource() == v1.multi || e.getSource() == v1.divid || e.getSource() == v1.punkt) { - else if (merker == '÷') { - int ergebnisse = (int) m1.divid(zahl1, zahl2); - v1.updateErgebnisse(ergebnisse); - } + clickedButton = (JButton) e.getSource(); + speicher = clickedButton.getText(); + v1.setEingabe(letzterText + speicher); } + letzterText = v1.eingabe.getText(); + + if (e.getSource() == v1.berechnen) { + checkeOperator(); + textverteilen(); + textToNumber(); + String err = ""; + double ergebnis = 0; + + switch (merker) { + case '+': + ergebnis = m1.add(zahl1, zahl2).doubleValue(); + break; + + case '-': + ergebnis = m1.sub(zahl1, zahl2).doubleValue(); + break; + + case 'x': + ergebnis = m1.multi(zahl1, zahl2).doubleValue(); + break; + + case '÷': + ergebnis = m1.divid(zahl1, zahl2).doubleValue(); + break; + + default: + err = "Bitte geben Sie einen gültigen Operator ein."; + } + + if (!err.isEmpty()) + System.out.println(err); +// v1.showError(err); + else + v1.updateErgebnisse(ergebnis); + } + + if (e.getSource() == v1.clear) { + v1.eingabe.setText(""); + } + + if (e.getSource() == v1.back) { + if (letzterText.length() == 0) + v1.eingabe.setText(letzterText); + else { + letzterText = letzterText.substring(0, letzterText.length() - 1); + v1.eingabe.setText(letzterText); + } + + } + letzterText = v1.eingabe.getText(); } + }; - - v1.button1.addActionListener(actionListener); - v1.button2.addActionListener(actionListener); - v1.button3.addActionListener(actionListener); - v1.button4.addActionListener(actionListener); - v1.button5.addActionListener(actionListener); - v1.button6.addActionListener(actionListener); - v1.button7.addActionListener(actionListener); - v1.button8.addActionListener(actionListener); - v1.button9.addActionListener(actionListener); - v1.button0.addActionListener(actionListener); - v1.punkt.addActionListener(actionListener); - v1.plus.addActionListener(actionListener); - v1.minus.addActionListener(actionListener); - v1.divid.addActionListener(actionListener); - v1.multi.addActionListener(actionListener); - v1.eingabe.addActionListener(actionListener); - v1.berechnen.addActionListener(actionListener); - } - + + v1.setAction(actionListener); + } + private void checkeOperator() { merker = ' '; for (int i = 0; i < letzterText.length(); i++) @@ -132,25 +108,45 @@ public class Controller implements ActionListener { if (letzterText.charAt(i) == operationen[j]) merker = operationen[j]; } - + private void textverteilen() { if (merker != ' ') { int i = letzterText.indexOf(merker); erst = letzterText.substring(0, i); - last = letzterText.substring(i + 1,letzterText.length()); + last = letzterText.substring(i + 1, letzterText.length()); } } - + public void textToNumber() { - zahl2 = Integer.parseInt(last); + if (erst.contains(".") || last.contains(".")) { + zahl1 = Double.parseDouble(erst); + zahl2 = Double.parseDouble(last); + } else { + zahl1 = Integer.parseInt(erst); + zahl2 = Integer.parseInt(last); + } } - @Override - public void actionPerformed(ActionEvent e) {} + public void clearTextfield() { + ActionListener actionListener = new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { - public static void main(String[] args) { - Modell m = new Modell<>(); - View v = new View(); - Controller n1 = new Controller(m, v); - } -} \ No newline at end of file + if (e.getSource() == v1.clear) { + v1.eingabe.setText(""); + } + } + }; + + } + + @Override + public void actionPerformed(ActionEvent e) { + } + + public static void main(String[] args) { + Modell m = new Modell<>(); + View v = new View(); + Controller n1 = new Controller(m, v); + } +} diff --git a/Programmierung2/src/Übungen/TaschenrechnerGUI/JunitTest.java b/Programmierung2/src/Übungen/TaschenrechnerGUI/JunitTest.java index 72e4c72..1b0737e 100644 --- a/Programmierung2/src/Übungen/TaschenrechnerGUI/JunitTest.java +++ b/Programmierung2/src/Übungen/TaschenrechnerGUI/JunitTest.java @@ -22,14 +22,20 @@ public class JunitTest { } - @Test + @Disabled public void testSub() { Modell m1 = new Modell<>(); - assertEquals(5 ,m1.sub(10, 5).intValue()); } @Test + public void testmulti() { + Modell m1 = new Modell<>(); + assertEquals(1.44 ,m1.multi(1.2, 1.2).doubleValue()); + + } + + @Disabled public void testdivid() { Modell m1 = new Modell<>(); assertEquals(5 ,m1.divid(5, 0).intValue()); diff --git a/Programmierung2/src/Übungen/TaschenrechnerGUI/View.java b/Programmierung2/src/Übungen/TaschenrechnerGUI/View.java index 805c3de..859f375 100644 --- a/Programmierung2/src/Übungen/TaschenrechnerGUI/View.java +++ b/Programmierung2/src/Übungen/TaschenrechnerGUI/View.java @@ -15,6 +15,7 @@ public class View extends JFrame { // Fenster Elemente: JTextField eingabe = new JTextField(); JLabel ergebnisse = new JLabel(); + JLabel error = new JLabel(); JButton button1 = new JButton("1"); JButton button2 = new JButton("2"); @@ -31,7 +32,9 @@ public class View extends JFrame { JButton multi = new JButton("x"); JButton divid = new JButton("÷"); JButton punkt = new JButton("."); - JButton berechnen = new JButton("OK"); + JButton berechnen = new JButton("="); + JButton clear = new JButton("C"); + JButton back = new JButton("←"); int buttonWidth = 60; int buttonheight = 30; @@ -47,7 +50,8 @@ public class View extends JFrame { this.setLayout(null); ergebnisse.setBounds(40, 60, 100, 30); - eingabe.setBounds(40, 100, buttonWidth * 5, 40); + error.setBounds(40, 60, 100, 30); + eingabe.setBounds(40, 100, buttonWidth * 6 + 20, 40); button1.setBounds(40,150,buttonWidth,buttonheight); button2.setBounds(120,150,buttonWidth,buttonheight); button3.setBounds(200,150,buttonWidth,buttonheight); @@ -73,10 +77,22 @@ public class View extends JFrame { divid.setBackground(Color.GRAY); divid.setForeground(Color.WHITE); - berechnen.setBackground(Color.RED); - berechnen.setForeground(Color.WHITE); - berechnen.setBounds(280, 310, buttonWidth, buttonheight); + + clear.setBackground(Color.RED); + clear.setForeground(Color.white); + clear.setBounds(360,150 , buttonWidth, buttonheight); + + back.setBackground(Color.ORANGE); + back.setForeground(Color.white); + back.setBounds(360,190, buttonWidth, buttonheight); + + berechnen.setBackground(Color.GRAY); + berechnen.setForeground(Color.WHITE); + berechnen.setBounds(360, 230, buttonWidth, buttonheight* 2 + 10); + + this.add(clear); + this.add(error); this.add(ergebnisse); this.add(eingabe); this.add(button1); @@ -95,13 +111,46 @@ public class View extends JFrame { this.add(multi); this.add(divid); this.add(berechnen); + this.add(back); } - public void updateErgebnisse(int erg) { - + public void updateErgebnisse(double erg) { ergebnisse.setText(erg + ""); } + + public void showError(String err) { + error.setText(err); + } + + public void setEingabe(String auswahl) { + eingabe.setText(auswahl); + } + + + + + public void setAction(ActionListener actionListener) { + button1.addActionListener(actionListener); + button2.addActionListener(actionListener); + button3.addActionListener(actionListener); + button4.addActionListener(actionListener); + button5.addActionListener(actionListener); + button6.addActionListener(actionListener); + button7.addActionListener(actionListener); + button8.addActionListener(actionListener); + button9.addActionListener(actionListener); + button0.addActionListener(actionListener); + punkt.addActionListener(actionListener); + plus.addActionListener(actionListener); + minus.addActionListener(actionListener); + divid.addActionListener(actionListener); + multi.addActionListener(actionListener); + eingabe.addActionListener(actionListener); + berechnen.addActionListener(actionListener); + clear.addActionListener(actionListener); + back.addActionListener(actionListener); + } } diff --git a/Programmierung2/src/Übungen/TicTac/Controller.java b/Programmierung2/src/Übungen/TicTac/Controller.java index 10e936d..b2596ab 100644 --- a/Programmierung2/src/Übungen/TicTac/Controller.java +++ b/Programmierung2/src/Übungen/TicTac/Controller.java @@ -16,6 +16,7 @@ public class Controller { } public static boolean checkSet(String X_O, int x, int y) { + if (x < 0 || x > 2 || y < 0 || y > 2) return false;