Question

J'écris un convertisseur de devises, mais je vais avoir un peu de mal caculating le taux de change pour chaque devise. Fondamentalement, je veux l'utilisateur de sélectionner une première currecy puis entrez un montant et appuyez sur « go » pour calculer le taux. mais je vais avoir du mal avec les auditeurs sur JMenuItem et JButton. Je l'ai déclaré deux auditeurs pour ligneMenu et JButton. comment puis-je utiliser l'auditeur sur le bouton pour regarder la sélection faite sur le menuIten pour qu'il fasse le bon calcul currecy?

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
Était-ce utile?

La solution

Essayez ceci avec les Euros. Pourquoi devriez-vous donner un endroit 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);
    }
}

Autres conseils

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.

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

Départ: Comment élément utilisation Carte sous forme de texte d'un JComboBox pour un exemple pour vous obtenir commencer à l'aide d'un objet dans la zone de liste déroulante.

Personnellement, j'ajouter dans un Enumeration pour indiquer le type de conversion de devises. par exemple:

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

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

private ConversionType fromType;

Voici ce que vous définissez dans votre écouteur de sélection.

De là, il y a une question de faire les différentes conversions dans votre écouteur d'action basé sur la variable d'état (fromType). Quelque chose comme ceci:

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

est en quelque sorte d'une approche générale -. J'espère que cela aide

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top