Guten Morgen, ich habe einen Taschenrechner programmiert, und ich denke habe Alle Vorgaben laut Aufgabestellung umgesetzt, bis auf eine Sache, und zwar
sobald ich die Rechenoperation wechsle, zum Beispiel von der Addition auf Multiplikation über Kombinationsfeld, dann soll die Berechnung automatisch erfolgen.
Also: Ohne dass ich den Button Berechnen anklicke, soll die Berechnung erfolgen.
Vor Allem haben wir in unsere Unterlagen so einem Fall nicht behandelt. Es wäre super, wenn jemand auf mein Code eingeht ohne starke Veränderung, da ich noch Anfänger bin und starke Veränderung sorgen für Verwirrung. Zuerst möchte ich mich für eure Unterstützung bedanken.
Aufgabestellung:
Ändern Sie den Taschenrechner so, dass die Auswahl der Rechenoperation nicht mehr über eine Gruppe mit Optionsfeldern erfolgt, sondern über ein Kombinationsfeld.
Dabei gelten folgende Vorgaben:
- Erstellen Sie die Liste für das Kombinationsfeld über ein Array.
- Ermitteln Sie die Rechenart, die ausgeführt werden soll, direkt über den Index des ausgewählten Eintrags in der Liste des Kombinationsfelds.
- Sobald ein anderer Eintrag in dem Kombinationsfeld ausgewählt wurde, soll die Rechnung sofort ausgeführt werden.
- Sorgen Sie bei der Ereignisverarbeitung dafür, dass überprüft wird, welche Komponente das Ereignis ausgelöst hat.
Ich habe im Forum und Internet recherchiert, leider bin ich nicht weiter gekommen. Einige nehmen Veränderungen in dem ActionListener vor . Ich würde gerne meine Methode berechnen() beibehalten, wenn es ginge.
Auf jeden Fall wäre euch sehr dankbar für Lösungsansätze bzw. Lösungsvorschlag, ohne Alles komplett um zu programmieren.
sobald ich die Rechenoperation wechsle, zum Beispiel von der Addition auf Multiplikation über Kombinationsfeld, dann soll die Berechnung automatisch erfolgen.
Also: Ohne dass ich den Button Berechnen anklicke, soll die Berechnung erfolgen.
Vor Allem haben wir in unsere Unterlagen so einem Fall nicht behandelt. Es wäre super, wenn jemand auf mein Code eingeht ohne starke Veränderung, da ich noch Anfänger bin und starke Veränderung sorgen für Verwirrung. Zuerst möchte ich mich für eure Unterstützung bedanken.
Aufgabestellung:
Ändern Sie den Taschenrechner so, dass die Auswahl der Rechenoperation nicht mehr über eine Gruppe mit Optionsfeldern erfolgt, sondern über ein Kombinationsfeld.
Dabei gelten folgende Vorgaben:
- Erstellen Sie die Liste für das Kombinationsfeld über ein Array.
- Ermitteln Sie die Rechenart, die ausgeführt werden soll, direkt über den Index des ausgewählten Eintrags in der Liste des Kombinationsfelds.
- Sobald ein anderer Eintrag in dem Kombinationsfeld ausgewählt wurde, soll die Rechnung sofort ausgeführt werden.
- Sorgen Sie bei der Ereignisverarbeitung dafür, dass überprüft wird, welche Komponente das Ereignis ausgelöst hat.
Ich habe im Forum und Internet recherchiert, leider bin ich nicht weiter gekommen. Einige nehmen Veränderungen in dem ActionListener vor . Ich würde gerne meine Methode berechnen() beibehalten, wenn es ginge.
Auf jeden Fall wäre euch sehr dankbar für Lösungsansätze bzw. Lösungsvorschlag, ohne Alles komplett um zu programmieren.
Java:
public class TaschenrechnerV3_Test extends JFrame{
private static final long serialVersionUID = 4668009235734676602L;
//die Komponente
//zwei Eingabefelder
//jetzt mit Format-Vorgaben
private JFormattedTextField eingabe1, eingabe2;
//verfügbare Rechenoperationen werden in Array abgelegt.
private String [] rechenOperation = {"Addition", "Subtraktion", "Division", "Multiplikation"};
//die Daten kommen aus dem Array rechenOpertion.
private JComboBox <String> auswahl = new JComboBox <String> (rechenOperation);
//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
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 TaschenrechnerV3_Test(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);
add(panelEinAus,BorderLayout.WEST);
//das Panel mit dem Kombinationsfeld in der Mitte
add(panelBerechnung,BorderLayout.CENTER);
//das Panel mit den Buttons nach rechts
add(panelButtons, BorderLayout.EAST);
add(auswahl);
//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 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();
//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);
tempPanel.add(auswahl);
//die Schaltflächen mit dem Listener verbinden
MeinListener listener = new MeinListener();
schaltflaecheBeenden.addActionListener(listener);
schaltflaecheBerechnen.addActionListener(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 {
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;
}
//welche Operation ist ausgewählt?
if (auswahl.getSelectedIndex() == 0)
ergebnis = zahl1 + zahl2;
if (auswahl.getSelectedIndex() == 1)
ergebnis = zahl1 - zahl2;
if (auswahl.getSelectedIndex() == 3)
ergebnis = zahl1 * zahl2;
//bei der Division überprüfen wir den zweiten Wert auf 0
if (auswahl.getSelectedIndex() == 2) {
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 und umformen in String!
return (Double.toString(ergebnis));
}
else
return ("n. definiert!");
}
public static void main(String [] args) {
new TaschenrechnerV3_Test("Taschenrechner_V3.0");
}
}