2010-12-08 12 views
2

私は通貨コンバータを作成していますが、各通貨の為替レートを計算するのに少し問題があります。基本的に私は、ユーザーがcurrecyを選択してから、金額を入力し、 "go"ボタンを押してレートを計算してほしい。 JMenuItemとJButtonのリスナーに問題があります。私はmenuItemとJButtonの2つのリスナーを宣言しました。ボタン上のリスナーを使用してmenuItenで行われた選択を調べ、適切なカーレシー計算を行うにはどうすればよいですか?JAVA:JMenuItemとJbuttonでリスナーを使用してレートを計算する方法

ありがとうございました。

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

なぜ通貨を選択するのですか?選択した通貨または選択した通貨に変換していますか? – khachik

+0

メニューの代わりに 'JComboBox'esを使うべきだと思います。ただし、選択した通貨のメニューラベルを選択すると、ボタンリスナーにメニューラベルが表示されます。しかし、私はまだあなたが1つの通貨を使用して変換する方法を理解していません:) – khachik

+0

私は選択された通貨をスターリングに変換します。したがって、ユーザーがUSDを選択した場合、スターリングに入力された金額が計算されます。 – Maxi90

答えて

1

これをユーロで試してみてください。始めてみよう。

 

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

あなたの投稿に感謝していますが、私は他の通貨に少し問題があります。それは「ユーロ」のためだけに働くようです。 else if(currencyMenu.getText() .equals( "Japanes Yen")) { answerLabel。setText(JapYenToSterling(Double.valueOf(amountField.getText()))+ "Japanese Yen"); } } – Maxi90

+0

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

+0

Iveは、上記のコードをJapYenToSterling()を反映するように更新しました。あなたが触れるべきコードの唯一の部分は、buttonClicked関数であり、変換関数を追加します。それ以外は、プログラムは問題ありません。ユーロと円で何が行われているのか見てみましょう。他のすべての変換はまったく同じ方法で行われます。 – user489041

3

通常のアプローチは、メニューリスナーが(即ち、フィールドに為替レートを保存するメソッドを呼び出す)アプリケーションの状態を変化させることです。

次に、計算コードはこの値を読み取って使用できます。

0

私は個人的に通貨換算タイプを示す列挙型を追加します。例えば:これを使用して

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

は、あなたはクラスの状態変数を保持することができます。

private ConversionType fromType; 

これはあなたの選択のリスナーに設定したものです。

そこから、状態変数(fromType)に基づいてアクションリスナーでさまざまな変換を行うことが問題になります。このような何か:

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

これは一般的なアプローチの一種である - 私はこのことができます願っています。

+0

こんにちは、ありがとう私は選択された通貨をスターリングに変換していることを忘れていました。あなたのソリューションでどうすればいいですか? – Maxi90

+0

私はそれに向かって編集します。 – javamonkey79

0

また、JComboBoxを使用して通貨を保存することをお勧めします。通貨名とコンバージョン率の両方を格納するオブジェクトを作成します。変換された金額を計算する必要がある場合は、選択したアイテムをコンボから取得し、そのコンバージョン率を計算に使用します。この方法を使用すると、サポートする通貨の数を簡単に拡大することができます。

チェックアウト:How to use Map element as text of a JComboBoxコンボボックスでオブジェクトを使用する例を紹介します。

関連する問題