2010-12-08 7 views
2

Ich schreibe einen Währungsumrechner, aber ich habe ein wenig Mühe, den Wechselkurs für jede Währung zu caculating. Grundsätzlich möchte ich, dass der Benutzer zuerst eine Währung auswählt, dann einen Betrag eingibt und auf "Los" klickt, um die Rate zu berechnen. aber ich habe Probleme mit den Listenern auf JMenuItem und JButton. Ich habe zwei Listener für MenuItem und JButton deklariert. Wie verwende ich den Listener auf der Schaltfläche, um nach der Auswahl zu suchen, die in der Menüzeile getroffen wurde, damit die richtige Berechnung der Währungsabweichung vorgenommen wird?JAVA: wie Listener auf JMenuItem und Jbutton verwendet werden, um Preise zu berechnen

danke.

Code:

private class selectionListener implements ActionListener 
    { 
     double EuroToSterling(double euro) 
     { 
      double total = Double.parseDouble(amountField.getText()); 
      return total; 
     } 
     public void actionPerformed(ActionEvent e) 
     { 
      if (e.getActionCommand().equals("Euros")) 
       // result = EuroToSterling(10*euro); 
       currencyMenu.setLabel("Euros"); 
       // answerLabel.setText("this" + EuroToSterling(1.22*2)); 

      if (e.getActionCommand().equals("Japanese Yen")) 
       currencyMenu.setLabel("Japanese Yen"); 

     } 
    } 



    private class GoButtonListener implements ActionListener 
    { 
     public void actionPerformed(ActionEvent evt) 
     { 

//please help with this section 
+0

Warum muss eine Währung ausgewählt werden? Sie konvertieren in die ausgewählte Währung oder in die ausgewählte Währung? – khachik

+0

Ich denke, Sie sollten 'JComboBox'en anstelle von Menüs verwenden. Wenn Sie jedoch die Menübeschriftung für die ausgewählte Währung auswählen, können Sie einfach die Menübeschriftung in der Tastenliste abfragen. Aber ich verstehe immer noch nicht, wie Sie mit einer Währung konvertieren können :) – khachik

+0

Ich konvertiere jede ausgewählte Währung in Pfund Sterling. Wenn der Benutzer also USD auswählt, würde er den in Pfund Sterling eingegebenen Betrag berechnen. – Maxi90

Antwort

1

Probieren Sie es mit den Euros aus. Sollte Ihnen einen Platz geben, um anzufangen.

 

/* 
* 
* Currency converting 
* 
*/ 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JButton; 
import javax.swing.JTextField; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import javax.swing.JComboBox; 

import javax.swing.UIManager; 

public class CurrencyConverterWin extends JFrame { 

    private JLabel promptLabel; 
    private JTextField amountField; 
    private JButton goButton; 
    private JPanel inputPanel; 
    private JPanel answerPanel; 
    private JLabel answerLabel; 
    private JLabel selectLabel; 
    private JComboBox currencyMenuBar; 
    private JPanel menuPanel; 
    private double result = 0.0; 
    private double euro = 1.22257; 
    private double japYen = 152.073; 
    private double rusRuble = 42.5389; 
    private double usd = 1.5577; 

    public CurrencyConverterWin() { 
     super(); 
     this.setSize(500, 200); 
     this.setTitle("Currency Converter Window"); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     this.setLayout(new GridLayout(3, 1)); 

     this.selectLabel = new JLabel("Select a currency to convert to: ", JLabel.RIGHT); 
     this.answerLabel = new JLabel(" ", JLabel.CENTER); 

     currencyMenuBar = new JComboBox(new String[]{"Euros","Japanese Yen","Russian Rubles","US Dollars"}); 

     this.menuPanel = new JPanel(); 
     this.menuPanel.add(this.selectLabel); 
     this.menuPanel.add(this.currencyMenuBar); 
     this.add(this.menuPanel); 

     this.promptLabel = new JLabel("(select a currency first) ", JLabel.RIGHT); 
     this.answerLabel = new JLabel(" ", JLabel.CENTER); 

     this.amountField = new JTextField("", 8); 
     this.goButton = new JButton("GO"); 
     goButton.addActionListener(new java.awt.event.ActionListener() { 

      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       buttonClicked(evt); 
      } 
     }); 

     this.inputPanel = new JPanel(); 
     this.inputPanel.add(this.promptLabel); 
     this.inputPanel.add(this.amountField); 
     this.inputPanel.add(this.goButton); 

     this.add(this.inputPanel); 

     this.answerPanel = new JPanel(); 
     this.answerPanel.add(this.answerLabel); 
     this.add(this.answerPanel); 
    } 

    double EuroToSterling() { 
     double total = Double.parseDouble(amountField.getText()) * euro; 
     return total; 
    } 

    double JapYenToSterling() 
    { 
     double japToSterlingTotal = Double.parseDouble(amountField.getText()) * japYen; 
     return japToSterlingTotal; 
    } 


//String currencyEntered = yearField.getText(); 
    public void buttonClicked(ActionEvent evt) { 
     if(currencyMenuBar.getSelectedItem().equals("Euros")) 
     { 
      answerLabel.setText(EuroToSterling() + " Euros"); 
     } 
     if(currencyMenuBar.getSelectedItem().equals("Japanese Yen")) 
     { 
      answerLabel.setText(JapYenToSterling() + " Japanese Yen"); 
     } 
    } 

    public static void main(String[] args) {   
     try{UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");} 
     catch (Exception e){e.printStackTrace();} 
     CurrencyConverterWin win = new CurrencyConverterWin(); 
     win.setVisible(true); 
    } 
} 
 
+0

Hallo danke für deinen Beitrag, aber ich habe ein kleines Problem mit anderen Währungen, es scheint nur für "Euro" zu funktionieren. Bitte sieh dir die Änderung an, die ich gemacht habe: sonst if (currencyMenu.getText() .equals ("Japanes Yen")) { answerLabel.setText (JapYenToSterling (Double.valueOf (amountField.getText())) + "Japanischer Yen"); } } – Maxi90

+0

doppelter JapYenToSterling (doppelter japYen) { doppelter japToSterlingTotal = Double.parseDouble (amountField.getText()) * 152.07; Rückgabe japToSterlingTotal; } – Maxi90

+0

Ich habe den obigen Code aktualisiert, um das JapYenToSterling() widerzuspiegeln. Die einzigen Teile des Codes, die Sie berühren sollten, sind die buttonClicked-Funktion und fügen Sie Ihre Konvertierungsfunktionen hinzu. Ansonsten ist das Programm in Ordnung. Schauen Sie einfach, was mit dem Euro und dem Yen gemacht wird. Alle anderen Konvertierungen erfolgen auf genau dieselbe Weise. – user489041

3

Die übliche Vorgehensweise ist, dass das Menü Hörer den Zustand der Anwendung ändert (das heißt ruft eine Methode, die den Wechselkurs in einem Feld sparen).

Dann kann der Berechnungscode diesen Wert lesen und verwenden.

0

Ich würde persönlich in einer Enumeration hinzufügen, um den Währungsumrechnungstyp zu bezeichnen. zB:

public enum ConversionType { 
    DOLLARS, 
    EUROS, 
    RUBLES 
    //ETC... 
} 

Mit diesem können Sie eine Statusvariable in der Klasse halten:

private ConversionType fromType; 

Dies ist, was Sie in Ihrer Auswahl Hörer einstellen.

Von dort aus geht es darum, die verschiedenen Konvertierungen in Ihrem Aktionslistener basierend auf der Statusvariablen (fromType) durchzuführen. So etwas wie das:

Dies ist eine Art allgemeiner Ansatz - ich hoffe, das hilft.

+0

Hallo, danke, ich habe vergessen zu erwähnen, dass ich jede ausgewählte Währung in Sterling umwandele. Wie würde ich das mit Ihrer Lösung machen? – Maxi90

+0

Ich werde es in Richtung ändern. – javamonkey79

0

Ich würde auch vorschlagen, dass Sie eine JComboBox verwenden, um die Währungen zu speichern. Sie erstellen ein Objekt, in dem sowohl der Name der Währung als auch die Conversion-Rate gespeichert werden. Dann, wenn Sie den umgerechneten Betrag berechnen müssen, erhalten Sie den ausgewählten Artikel aus der Combo und verwenden den Umrechnungskurs in Ihrer Berechnung. Mit diesem Ansatz können Sie die Anzahl der Währungen, die Sie unterstützen, leicht erweitern.

Auschecken: How to use Map element as text of a JComboBox für ein Beispiel, mit dem Sie anfangen, ein Objekt in der Combobox zu verwenden.

Verwandte Themen