Swing Taschenrechner

tinche_st

Mitglied
Hallo liebe Programmierer,

ich habe ein Problem mit einem Quelltext zum Erstellen eines Taschenrechners. Ich versuche die Rechenoperationen über Dropdown zu wählen (durch JComboBox). Durch Eingabe von 2 Ziffern und Klick auf den Button ‚rechnen‘ möchte ich ein Ergebnis bekommen. Nach 20 unterschiedlichen Versuchen geht Garnichts mehr. Ich bitte um Hilfe!

Das ist mein Quelltext:

Java:
package taschenrechner;


import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DecimalFormat;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;
import javax.swing.JComboBox;

import javax.swing.border.TitledBorder;

public class TaschenrechnerGUI extends JFrame{
 
    //automatisch über Eclipse eingefügt
    private static final long serialVersionUID = 3006212012028893840L;
    
    //die Komponente
    //zwei Eingabefelder
    private JTextField eingabe1, eingabe2;
    private double zahl1, zahl2, ergebnis = 0;
    boolean fehlerFlag = false;
    //Array für die Combobox
    private String[] optionsAuswahl = {"addition", "subtraktion", "multiplikation", "division"};
    private JComboBox <String> auswahl;
    //zwei Schaltflächen
    private JButton schaltflaecheBerechnen, schaltflaecheBeenden;
    //ein Label für die Ausgabe
    private JLabel ausgabe;
    
    //die innere Klasse für die Ereignisverarbeitung
    class MeinListener implements ActionListener {
        
        @Override
        public void actionPerformed(ActionEvent e) {
            //wurde auf Beenden geklickt?
            //dann das Programm beenden
        	Object ausloeser = e.getSource();
        	if (ausloeser instanceof JComboBox){
        		  if (auswahl.getSelectedItem().toString().equals("addition"))
        	            ergebnis = zahl1 + zahl2;
        	        if (auswahl.getSelectedItem().toString().equals("subtraktion"))
        	            ergebnis = zahl1 - zahl2;
        	        if (auswahl.getSelectedItem().toString().equals("multiplikation"))
        	            ergebnis = zahl1 * zahl2;
        	        //bei der Division überprüfen wir den zweiten Wert auf 0
        	        if (auswahl.getSelectedItem().toString().equals("division")) {
        	            if (zahl2 != 0)
        	                ergebnis = zahl1 / zahl2;
        	            else 
        	                fehlerFlag = true;
        	        }
        	        //wenn es keine Probleme gegeben hat, liefern wir das Ergebnis zurück
        	        if (fehlerFlag == false) {
        	            //die Formatvorgabe über die Klasse DecimalFormat
        	            DecimalFormat formatFolge = new DecimalFormat("0.##");
        	            //das Format anwenden, das Ergebnis ist eine Zeichenkette
        	            return (formatFolge.format(ergebnis));
        	        }
        	        else
        	            return ("Nicht definiert");
        	}
            if (e.getActionCommand().equals("ende")) 
                System.exit(0);
            //wurde auf Berechnen geklickt?
            //dann eine Methode für die Berechnung aufrufen
            //und das Ergebnis anzeigen
            if (e.getActionCommand().equals("rechnen"))  
                ausgabe.setText(berechnen());
        }
        
    }
    
    //der Konstruktor
    public TaschenrechnerGUI(String titel) {
        
        super(titel);
        
        //insgesamt 4 Panels
        JPanel panelEinAus, panelBerechnungsCombo, panelButtons, gross;
        
        //die Panels über die Methoden erstellen
        panelEinAus = panelEinAusErzeugen();
        panelBerechnungsCombo = panelBerechnungsComboErzeugen();
        panelButtons = panelButtonErzeugen();
        
        //das Border-Layout benutzen
        //es ist Standard und muss nicht gesetzt werden
        
        //die Panels hinzufügen
        //die beiden größeren Panel fassen wir noch einmal zusammen
        gross = new JPanel();
        gross.add(panelEinAus);
        gross.add(panelBerechnungsCombo);
        //die beiden kommen in die Mitte
        add(gross,BorderLayout.CENTER);
        //das Panel mit den Buttons nach rechts
        add(panelButtons,BorderLayout.EAST);
 
        //die Standard-Aktion setzen
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        //packen und anzeigen
        pack();
        setVisible(true);
        
        //Größenänderungen sind nicht zugelassen
        //damit das mühsam erstellte Layout nicht durcheinander kommt
        setResizable(false);
    }
 
    //die Methode erzeugt das Panel für die Ein- und Ausgabe
    //und liefert es zurück
    private JPanel panelBerechnungsComboErzeugen() {
        JPanel tempPanel = new JPanel();
        //es enthält die Eingabefelder mit beschreibendem Text und die Ausgabe
        //die Länge der Felder ist auf 10 Zeichen beschränkt
        
        //das Panel bekommt ein GridLaoyut mit 2 Spalten und etwas Abstand
        tempPanel.setLayout(new GridLayout(3,1));
        //ein beschreibendes Label für die erste Eingabe
        tempPanel.add(new JComboBox(optionsAuswahl));
        
        //einen Rahmen um das Panel ziehen
        tempPanel.setBorder(new TitledBorder("Operationen"));
        //das Panel zurückliefern
        return tempPanel;
    }
    
    private JPanel panelEinAusErzeugen() {
        JPanel tempPanel = new JPanel();
        //es enthält die Eingabefelder mit beschreibendem Text und die Ausgabe
        //die Länge der Felder ist auf 10 Zeichen beschränkt
        eingabe1 = new JTextField(10);
        eingabe2 = new JTextField(10);
        ausgabe = new JLabel("");
        
        //das Panel bekommt ein GridLaoyut mit 2 Spalten und etwas Abstand
        tempPanel.setLayout(new GridLayout(0,2,10,10));
        //ein beschreibendes Label für die erste Eingabe
        tempPanel.add(new JLabel("Zahl 1:"));
        //das erste Eingabefeld
        tempPanel.add(eingabe1);
        
        //und jetzt das zweite Eingabefeld
        tempPanel.add(new JLabel("Zahl 2: "));
        tempPanel.add(eingabe2);
        
        //und nun das Ausgabefeld für das Ergebnis
        tempPanel.add(new JLabel("Ergebnis: "));
        tempPanel.add(ausgabe);
        
        //einen Rahmen um das Panel ziehen
        tempPanel.setBorder(new TitledBorder("Ein- und Ausgabe"));
        //das Panel zurückliefern
        return tempPanel;
    }
    
    
    //die Methode erzeugt das Panel für die Schaltflächen
    //und liefert es zurück
    private JPanel panelButtonErzeugen() {
        JPanel tempPanel = new JPanel();
        
        schaltflaecheBeenden = new JButton(" Beenden ");
        //das Aktion-Command setzen
        schaltflaecheBeenden.setActionCommand("ende");
        schaltflaecheBerechnen = new JButton("Berechnen");
        schaltflaecheBerechnen.setActionCommand("rechnen");
        
        //Zwischenpanel für die Schaltflächen
        //ebenfalls ein GridLayout
        tempPanel.setLayout(new GridLayout(0,1));
        tempPanel.add(schaltflaecheBerechnen);
        //ein leeres Label einfügen
        tempPanel.add(new JLabel());
        tempPanel.add(schaltflaecheBeenden);
        
        //die Schaltflächen mit dem Listener verbinden
        MeinListener listener = new MeinListener();
        schaltflaecheBeenden.addActionListener(listener);
        schaltflaecheBerechnen.addActionListener(listener);
        
        tempPanel.setBorder(new TitledBorder("Funktionsbutton"));
        //das Panel zurückliefern
        return tempPanel;
    }
    
    //die Methode berechnet das Ergebnis und liefert es als 
    //Zeichenkette zurück
    private String berechnen() {

        try {
            zahl1 = Double.parseDouble(eingabe1.getText());
        }
        catch (Exception NumberFormatException) {
            fehlermeldung(eingabe1);
            return ("Nicht definiert");
        }
        
        try {
            zahl2 = Double.parseDouble(eingabe2.getText());
        }
        catch (Exception NumberFormatException) {
            fehlermeldung(eingabe2);
            //das Ergebnis ist nicht definiert
            return ("Nicht definiert");
        }
       
      
    }
    
    private void fehlermeldung(JTextField eingabefeld) {
        JOptionPane.showMessageDialog(this, "Ihre Eingabe ist nicht gültig","Eingabefehler", JOptionPane.ERROR_MESSAGE);
        eingabefeld.requestFocus();
    }
}

und das ist wie er aussehen soll: (nur hier ist das Problem, dass es nichts rechnet)

Java:
package taschenrechner;


import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DecimalFormat;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;
import javax.swing.JComboBox;

import javax.swing.border.TitledBorder;

public class TaschenrechnerGUI extends JFrame{

    private static final long serialVersionUID = 3006212012028893840L;

    private JTextField eingabe1, eingabe2;
    private String[] optionsAuswahl = {"addition", "subtraktion", "multiplikation", "division"};
    private JButton schaltflaecheBerechnen, schaltflaecheBeenden;
    private JLabel ausgabe;

    class MeinListener implements ActionListener {
        
        @Override
        public void actionPerformed(ActionEvent e) {
            if (e.getActionCommand().equals("ende")) 
                System.exit(0);
            if (e.getActionCommand().equals("rechnen"))  
                ausgabe.setText(berechnen());
        }
    }

    public TaschenrechnerGUI(String titel) {
        
        super(titel);

        JPanel panelEinAus, panelBerechnungsCombo, panelButtons, gross;

        panelEinAus = panelEinAusErzeugen();
        panelBerechnungsCombo = panelBerechnungsComboErzeugen();
        panelButtons = panelButtonErzeugen();

        gross = new JPanel();
        gross.add(panelEinAus);
        gross.add(panelBerechnungsCombo);

        add(gross,BorderLayout.CENTER);

        add(panelButtons,BorderLayout.EAST);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        pack();
        setVisible(true);

        setResizable(false);
    }

    private JPanel panelBerechnungsComboErzeugen() {
        JPanel tempPanel = new JPanel();

        tempPanel.setLayout(new GridLayout(3,1));
        tempPanel.add(new JComboBox(optionsAuswahl));
        tempPanel.setBorder(new TitledBorder("Operationen"));

        return tempPanel;
    }
    
    private JPanel panelEinAusErzeugen() {
        JPanel tempPanel = new JPanel();
        eingabe1 = new JTextField(10);
        eingabe2 = new JTextField(10);
        ausgabe = new JLabel("");

        tempPanel.setLayout(new GridLayout(0,2,10,10));
        tempPanel.add(new JLabel("Zahl 1:"));
        tempPanel.add(eingabe1);
        
        tempPanel.add(new JLabel("Zahl 2: "));
        tempPanel.add(eingabe2);        

        tempPanel.add(new JLabel("Ergebnis: "));
        tempPanel.add(ausgabe);
        
        tempPanel.setBorder(new TitledBorder("Ein- und Ausgabe"));

        return tempPanel;
    }
    

    private JPanel panelButtonErzeugen() {
        JPanel tempPanel = new JPanel();
        
        schaltflaecheBeenden = new JButton(" Beenden ");
        schaltflaecheBeenden.setActionCommand("ende");
        schaltflaecheBerechnen = new JButton("Berechnen");
        schaltflaecheBerechnen.setActionCommand("rechnen");
        

        tempPanel.setLayout(new GridLayout(0,1));
        tempPanel.add(schaltflaecheBerechnen);

        tempPanel.add(new JLabel());
        tempPanel.add(schaltflaecheBeenden);
        
        MeinListener listener = new MeinListener();
        schaltflaecheBeenden.addActionListener(listener);
        schaltflaecheBerechnen.addActionListener(listener);
        
        tempPanel.setBorder(new TitledBorder("Funktionsbutton"));
        return tempPanel;
    }
    
    private String berechnen() {
        double zahl1, zahl2, ergebnis = 0;
        boolean fehlerFlag = false;
        try {
            zahl1 = Double.parseDouble(eingabe1.getText());
        }
        catch (Exception NumberFormatException) {
            fehlermeldung(eingabe1);
            return ("Nicht definiert");
        }
        
        try {
            zahl2 = Double.parseDouble(eingabe2.getText());
        }
        catch (Exception NumberFormatException) {
            fehlermeldung(eingabe2);
            return ("Nicht definiert");
        }
        //welche Operation ist ausgewählt?
        //if (addition.isSelected())
            ergebnis = zahl1 + zahl2;
        //if (subtraktion.isSelected())
            ergebnis = zahl1 - zahl2;
        //if (multiplikation.isSelected())
            ergebnis = zahl1 * zahl2;
        //bei der Division überprüfen wir den zweiten Wert auf 0
        //if (division.isSelected()) {
            if (zahl2 != 0)
                ergebnis = zahl1 / zahl2;
            else 
                fehlerFlag = true;
        //}
        //wenn es keine Probleme gegeben hat, liefern wir das Ergebnis zurück
        if (fehlerFlag == false) {
            //die Formatvorgabe über die Klasse DecimalFormat
            DecimalFormat formatFolge = new DecimalFormat("0.##");
            //das Format anwenden, das Ergebnis ist eine Zeichenkette
            return (formatFolge.format(ergebnis));
        }
        else
            return ("Nicht definiert");
    }
    
    private void fehlermeldung(JTextField eingabefeld) {
        JOptionPane.showMessageDialog(this, "Ihre Eingabe ist nicht gültig","Eingabefehler", JOptionPane.ERROR_MESSAGE);
        eingabefeld.requestFocus();
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Exelsior JavaFX Taschenrechner mit FX AWT, Swing, JavaFX & SWT 6
melaniemueller Taschenrechner JavaFX AWT, Swing, JavaFX & SWT 4
N JavaFX Einfacher Taschenrechner mit Scene Builder und Java FX AWT, Swing, JavaFX & SWT 0
thor_norsk Taschenrechner AWT, Swing, JavaFX & SWT 8
melaniemueller JavaFX Taschenrechner mit SceneBuilder AWT, Swing, JavaFX & SWT 12
K JavaFX Taschenrechner textField auf 10stellen begrenzen AWT, Swing, JavaFX & SWT 26
L JavaFX javafx.fxml.LoadException bei einem Taschenrechner AWT, Swing, JavaFX & SWT 5
N Swing Taschenrechner GUI AWT, Swing, JavaFX & SWT 13
B Probleme Action Listener Taschenrechner AWT, Swing, JavaFX & SWT 27
O JavaFX mini Taschenrechner! AWT, Swing, JavaFX & SWT 35
N Taschenrechner mit mehreren Rechnungen AWT, Swing, JavaFX & SWT 18
A JavaFX Sehr viele Exceptions bei Taschenrechner mit JavaFx AWT, Swing, JavaFX & SWT 2
K Taschenrechner mit GUI AWT, Swing, JavaFX & SWT 2
L Event Handling Gui für Taschenrechner AWT, Swing, JavaFX & SWT 27
H Swing Taschenrechner GUI AWT, Swing, JavaFX & SWT 5
M Taschenrechner AWT, Swing, JavaFX & SWT 21
M AWT Java-Taschenrechner, wie Stack richtig verwenden? AWT, Swing, JavaFX & SWT 14
C Grafik Taschenrechner AWT, Swing, JavaFX & SWT 5
H Taschenrechner Coding Erklärung AWT, Swing, JavaFX & SWT 2
Jats Hilfe bei FocusListener für Taschenrechner AWT, Swing, JavaFX & SWT 4
B Taschenrechner mit ComboBox AWT, Swing, JavaFX & SWT 7
S AWT Probleme mit Taschenrechner AWT, Swing, JavaFX & SWT 9
V Bitte um Hilfe bei nem Taschenrechner AWT, Swing, JavaFX & SWT 8
C Taschenrechner in Java AWT, Swing, JavaFX & SWT 7
M MouseEvent JButton Taschenrechner AWT, Swing, JavaFX & SWT 5
K Java-Taschenrechner AWT, Swing, JavaFX & SWT 1
L Taschenrechner mit Klammern AWT, Swing, JavaFX & SWT 11
H Taschenrechner AWT, Swing, JavaFX & SWT 5
G Taschenrechner-Problem AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben