2010-12-08 30 views
2

J'écris un convertisseur de devises mais j'ai un peu de mal à calculer le taux de change pour chaque devise. fondamentalement, je veux que l'utilisateur sélectionne d'abord un currecy puis entrez un montant et appuyez sur le bouton "go" pour calculer le taux. mais j'ai des problèmes avec les listeners sur JMenuItem et JButton. J'ai déclaré deux listeners pour menuItem et JButton. comment est-ce que j'utilise l'auditeur sur le bouton pour regarder la sélection faite sur le menuEst-ce que cela fait le bon calcul de currecy?JAVA: comment utiliser les listeners sur JMenuItem et Jbutton pour calculer les taux

merci.

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

Pourquoi avez-vous une devise à sélectionner? Vous convertissez dans la devise sélectionnée ou dans la devise sélectionnée? – khachik

+0

Je pense que vous devriez utiliser 'JComboBox'es au lieu de menus. Cependant, si vous sélectionnez l'étiquette du menu dans la devise sélectionnée, vous pouvez simplement obtenir l'étiquette du menu dans votre écouteur de bouton. Mais je ne comprends toujours pas comment vous pouvez convertir en utilisant une monnaie :) – khachik

+0

Je convertis n'importe quelle monnaie sélectionnée en livres sterling. Donc, si l'utilisateur a choisi USD, il calcule le montant entré en livres sterling. – Maxi90

Répondre

1

Essayez ceci avec les Euros. Devrait vous donner une place pour commencer.

 

/* 
* 
* 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

Salut merci pour votre message, mais je vais avoir un petit problème avec d'autres devises, il semble que de travailler pour "euro" s'il vous plaît jeter un oeil à la modification que j'ai faite: else if (currencyMenu.getText() .equals ("Japanes Yen")) { answerLabel.setText (JapYenToSterling (Double.valueOf (amountField.getText())) + "Yen japonais"); } – Maxi90

+0

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

+0

J'ai mis à jour le code ci-dessus pour refléter JapYenToSterling(). Les seules parties du code que vous devez toucher sont la fonction buttonClicked et ajoutez vos fonctions de conversion. À part ça, vous programmez bien. Regardez ce qui se passe avec l'euro et le yen. Toutes les autres conversions se font exactement de la même manière. – user489041

3

L'approche habituelle est que l'auditeur du menu change l'état de l'application (à savoir appelle une méthode qui sauvera le taux de change dans un champ).

Ensuite, le code de calcul peut lire cette valeur et l'utiliser.

0

Je ajouterais personnellement une énumération pour indiquer le type de conversion monétaire. par exemple:

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

Avec cela, vous pouvez garder une variable d'état dans la classe:

private ConversionType fromType; 

C'est ce que vous définissez dans votre écouteur de sélection. De là, il s'agit de faire les différentes conversions dans votre programme d'écoute d'action basé sur la variable d'état (fromType). Quelque chose comme ceci:

if(fromType== EUROS) { 
convertEurosToSterling(value1, value2); 
} 

Ceci est une sorte d'approche générale - j'espère que cela aide.

+0

Salut, merci J'ai oublié de mentionner que je convertis toute monnaie sélectionnée en livres sterling. comment ferais-je cela avec votre solution? – Maxi90

+0

Je vais l'éditer vers ça. – javamonkey79

0

Je vous suggère également d'utiliser un JComboBox pour stocker les devises. Vous devez créer un objet pour stocker à la fois le nom de la devise et le taux de conversion. Ensuite, lorsque vous avez besoin de calculer le montant converti, vous obtenez l'élément sélectionné dans le combo et utilisez son taux de conversion dans votre calcul. Avec cette approche, vous pouvez facilement augmenter le nombre de devises que vous soutenez.

Extraire: How to use Map element as text of a JComboBox pour un exemple pour commencer à utiliser un objet dans la zone de liste déroulante.