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:
und das ist wie er aussehen soll: (nur hier ist das Problem, dass es nichts rechnet)
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();
}
}