Taschenrechner mit Kombinationsfeld

Guten Tag Liebe Javagemeinde,

aktuell bearbeite ich eine Aufgabe, die verlangt dass ein Taschenrechner über ein Kombinationsfeld
funktionieren soll und nach jeder ausgewählten Operation (+,-,*,/) das Ergebnis direkt ausgerechnet werden soll.
Also quasi dass man nicht jedes mal auf "Berechnen" klicken muss.

Das ganze wollte ich über einen Itemlistener realisieren, jedoch kriege ich es aktuell einfach nicht hin.

Hat vielleicht jemand geübteres Ahnung was in mein Code fehlt?....
habe ich den Listener falsch angebunden?



Java:
package de.fernschulen.taschenrechnerv3;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;

import javax.swing.JButton;

import javax.swing.JComboBox;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;

public class TaschenrechnerGUIV3 extends JFrame{

    //automatisch über Eclipse eingefügt
    private static final long serialVersionUID = 4668009235734676602L;
    
    //die Komponente
    //zwei Eingabefelder
    //jetzt mit Format-Vorgaben
    private JFormattedTextField eingabe1, eingabe2;
    
    //die Vier Rechenarten werden in einem Array abgelegt
    private String[] kombifeldRechenarten = {"addition", "subtraktion", "mutliplikation", "division"};
    
    //vier RadioButtons und eine Gruppe
    //private JRadioButton addition, subtraktion, multiplikation, division;
        
    //für das Rechnen
    //diesmal ein Kombinationsfeld
    private JComboBox <String> kombifeld;

    //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, ItemListener {
        
        @Override
        public void actionPerformed(ActionEvent e) {
            //wurde auf Beenden geklickt?
            //dann das Programm beenden
            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());
        }
        
        //Hierüber wird auf die neue zu berechnende Zahl direkt reagiert
        @Override
        public void itemStateChanged(ItemEvent e) {
            
            if (e.getSource() instanceof JComboBox)
                if (kombifeld.getSelectedItem().equals(e))
                    ausgabe.setText(berechnen());   
        }
    }
    
    
    //der Konstruktor
    public TaschenrechnerGUIV3(String titel) {
        
        super(titel);
        
        //insgesamt vier Panels
        JPanel panelEinAus, panelBerechnung, panelButtons, gross;
        
        //die Panels über die Methoden erstellen
        panelEinAus = panelEinAusErzeugen();
        panelBerechnung = panelBerechnungErzeugen();
        panelButtons = panelButtonErzeugen();
        
        //das Border-Layout benutzen
        //es ist der 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(panelBerechnung);
        //die beiden kommen in die Mitte
        add(gross,BorderLayout.CENTER);
        //das Panel mit den Buttons nach rechts
        add(panelButtons, BorderLayout.EAST);
        
        //die Standardaktion 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 panelEinAusErzeugen() {
        JPanel tempPanel = new JPanel();
        //es enthält die Eingabefelder mit beschreibendem Text und die Ausgabe
        //für die Eingabefelder wird jetzt auch ein Format vorgegeben
        eingabe1 = new JFormattedTextField(new DecimalFormat("#.##"));
        eingabe2 = new JFormattedTextField(new DecimalFormat("#.##"));
        ausgabe = new JLabel("");
        
        //das Panel bekommt ein GridLaoyut mit zwei 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 Auswahl
    //der Rechenoperation und liefert es zurück
    private JPanel panelBerechnungErzeugen() {
        JPanel tempPanel = new JPanel();
        
        kombifeld = new JComboBox<String> (kombifeldRechenarten);       
                
        //das kombifeld einpflegen
        tempPanel.add(kombifeld);
        
        //das Panel bekommt ein GridLaoyut mit einer Spalte
        tempPanel.setLayout(new GridLayout(0, 1));
        
        //und einen Rahmen
        tempPanel.setBorder(new TitledBorder("Operation: "));

        //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);
        
        
        //******************Die Schaltflaeche Berechnen mit dem Listener verbinden***************************
        //MeinListener listener = new MeinListener();
        schaltflaecheBerechnen.addItemListener(listener);
                
        
        
        
        //das Panel zurückliefern
        return tempPanel;
    }
    
    //die Methode berechnet das Ergebnis und liefert es als
    //Zeichenkette zurück
    private String berechnen() {
        //ergebnis muss initialisiert werden
        double zahl1, zahl2, ergebnis = 0;
        boolean fehlerFlag = false;
        
        //ungültige Werte können wegen der Maske nicht im Feld stehen
        //allerdings müssen wir die Ausnahme ParseException behandeln
        //da weisen wir einfach den Wert 0 zu
        try {
            //für das Konvertieren
            Number wert = NumberFormat.getNumberInstance(Locale.GERMANY).parse(eingabe1.getText());
            zahl1 = wert.doubleValue();
        }
        catch (Exception ParseException) {
            zahl1 = 0;
        }
        
        try {
            //für das Konvertieren
            Number wert = NumberFormat.getNumberInstance(Locale.GERMANY).parse(eingabe2.getText());
            zahl2 = wert.doubleValue();
        }
        catch (Exception ParseException) {
            zahl2 = 0;
        }

        //die Berechnungsform für die zuberechnenden Werte
        //über das aktuell ausgewählte Indexelement des Array beziehen
        if (kombifeld.getSelectedIndex() == 0)
            ergebnis = zahl1 + zahl2;
        if (kombifeld.getSelectedIndex() == 1)
            ergebnis = zahl1 - zahl2;
        if (kombifeld.getSelectedIndex() == 2)
            ergebnis = zahl1 * zahl2;
        //bei der Division überprüfen wir den zweiten Wert auf 0
        if (kombifeld.getSelectedIndex() == 3) {
            if (zahl2 != 0)
                ergebnis = zahl1 / zahl2;
            else
                fehlerFlag = true;
        }
        
        
        //wenn es keine Probleme gegeben hat, liefern wir das Ergebnis zurück
        if (fehlerFlag == false) {
            //das Ergebnis zurückgeben
            return (Double.toString(ergebnis));
        }
        else
            return ("n. def.");
    }
}
 
Ä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
T Swing Taschenrechner AWT, Swing, JavaFX & SWT 2
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
melaniemueller Reaktion auf Änderung im Kombinationsfeld AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Neue Themen


Oben