Domanda

Sto scrivendo un convertitore di valuta, ma sto avendo un po 'di problemi caculating del tasso di cambio per ciascuna valuta. Fondamentalmente voglio all'utente di selezionare un currecy prima quindi immettere una quantità e premere il tasto "go" per calcolare il tasso. ma sto avendo problemi con gli ascoltatori su JMenuItem e JButton. Ho dichiarato due ascoltatori per menuItem e JButton. Come faccio a utilizzare l'ascoltatore sul pulsante per guardare fuori per la selezione effettuata sulla menuIten in modo che rende il calcolo currecy giusto?

Grazie.

codice:

    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
È stato utile?

Soluzione

Prova questo fuori con gli euro. Dovrebbe darvi un posto per iniziare.


/*
 *
 * 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);
    }
}

Altri suggerimenti

L'approccio comune è che l'ascoltatore menu cambia lo stato dell'applicazione (cioè chiama un metodo che salva il cambio in un campo).

Quindi il codice di calcolo in grado di leggere questo valore e utilizzarlo.

Vorrei anche suggerire di utilizzare un JComboBox per memorizzare le valute. Si potrebbe creare un oggetto per memorizzare sia il nome della valuta e il tasso di conversione. Poi, quando è necessario calcolare l'importo convertito si ottiene l'elemento selezionato dal combo e utilizzare il tasso di conversione nel calcolo. Con questo approccio si può facilmente espandere il numero di valute sostenete.

Check out: Come uso Mappa elemento come testo di un JComboBox per un esempio per farti iniziare utilizzando un oggetto nella casella combinata.

Io personalmente aggiungere in un Enumeration per indicare il tipo di conversione di valuta. ad esempio:

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

Con questo, è possibile mantenere una variabile di stato della classe:

private ConversionType fromType;

Questo è ciò che si imposta nella selezione ascoltatore.

Da lì si tratta di una questione di fare le diverse conversioni nel vostro ascoltatore azione basato sulla variabile di stato (fromType). Qualcosa di simile a questo:

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

Questa è una sorta di un approccio generale -. Spero che questo aiuta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top