2012-05-02 13 views
-1

晚上好,我仍然對我的項目工作(試圖更加努力提高自己。)設置X犯規的頻率會影響我的整個程序

我有一個轉換的錢到另一個貨幣型(如歐元美元計劃),我有我的菜單,我正在設定自己的費率。它設定的速度非常好,但當我嘗試轉換貨幣時,setRate不影響它,結果是NaN或無窮大。這是我的整個代碼。

private JMenuBar menuBar = new JMenuBar(); // Window menu bar 
    public Converter(String title) { 

     setTitle(title); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setJMenuBar(menuBar); // Add the menu bar to the window 
     JMenu fileMenu = new JMenu("File"); // Create File menu 
     JMenu elementMenu = new JMenu("Rate Setters"); // Create Elements menu 
     JMenuItem subTest = new JMenuItem("Test"); 
     JMenuItem rateMyMoney = new JMenuItem("Set the Rates."); 
     subTest.addActionListener(new ActionListener(){  
      public void actionPerformed(ActionEvent actionEvent){ 
       Converter convert = new Converter(); 

       GridLayout converterGridLayout = new GridLayout(2,2,12,6); 
       convert.setLayout(converterGridLayout); 
       convert.setVisible(true); 
      } 
     }); 

     rateMyMoney.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent actionEvent){ 

       SetMyRates setRates = new SetMyRates(); 

       GridLayout setRateGridLayout = new GridLayout(2,2,12,6); 
       setRates.setLayout(setRateGridLayout); 
       setRates.setVisible(true); 
      } 
     }); 


     menuBar.add(fileMenu); // Add the file menu 
     menuBar.add(elementMenu); // Add the element menu 
     fileMenu.add(subTest); 
     elementMenu.add(rateMyMoney); 
    } 
    public Converter() { 

     JPanel dataPanel = new JPanel(new GridLayout(2, 2, 12, 6)); 
     dataPanel.add(tlLabel); 

     dataPanel.add(dollarsLabel); 
     dataPanel.add(tlField); 
     dataPanel.add(dollarsField); 
     JPanel buttonPanel = new JPanel(); 
     buttonPanel.add(tlButton); 
     buttonPanel.add(dollarsButton); 
     Container container = this.getContentPane(); 
     container.add(dataPanel, BorderLayout.CENTER); 
     container.add(buttonPanel, BorderLayout.SOUTH); 
     tlButton.addActionListener(new TLConverter()); 
     dollarsButton.addActionListener(new DollarsConverter()); 
     buttonPanel.add(setRates); 
     pack(); 

    } 
public class SetMyRates extends JFrame{ //extends Converter{ 
    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    public SetMyRates(){ 

     JPanel dataPanel = new JPanel(new GridLayout(2, 2, 12, 6)); 
     dataPanel.add(setTLLabel); 

     dataPanel.add(setDollarsLabel); 
     dataPanel.add(setTLField); 
     dataPanel.add(setDollarsField); 
     JPanel buttonPanel = new JPanel(); 
     buttonPanel.add(setTLButton); 
     buttonPanel.add(setDollarsButton); 
     Container container = this.getContentPane(); 
     container.add(dataPanel, BorderLayout.CENTER); 
     container.add(buttonPanel, BorderLayout.SOUTH); 
     setTLButton.addActionListener(new SetTL()); 
     setDollarsButton.addActionListener(new SetDollars()); 
     pack(); 

    } 
}; 
    private class SetTL implements ActionListener{ 

     public void actionPerformed(ActionEvent e) 
     { 
      try 
      { 
       String input = setTLField.getText(); 
       System.out.println("text = " + input); 
       double tl = Double.parseDouble(input); 
       convertMe.setRate(tl); 
      } 
      catch(Exception ex) 
      { 
       JOptionPane.showMessageDialog(null, "Please enter correct Rate."); 
      } 
     } 
    } 
    private class SetDollars implements ActionListener{ 

     public void actionPerformed(ActionEvent e) 
     { 
      try 
      { 
       String input = setDollarsField.getText(); 
       System.out.println("text = " + input); 
       double setDolarRate = Double.parseDouble(input); 
       convertMe.setRate(setDolarRate); 
      } 
      catch(Exception ex) 
      { 
       JOptionPane.showMessageDialog(null, "Please enter correct Rate."); 
      } 
     } 
    } 

    private class TLConverter implements ActionListener 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      try 
      { 
       String input = tlField.getText(); 
       double tl = Double.parseDouble(input); 
       convertMe.setTL(tl); 

       double dollars = convertMe.getDollars(); 
       dollarsField.setText(String.format("%.2f", dollars)); 
      } 
      catch(Exception ex) 
      { 
       JOptionPane.showMessageDialog(null, "Please enter the amount that will be converted."); 
      } 
     } 
    } 


    private class DollarsConverter implements ActionListener 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      String input = dollarsField.getText(); 
      double dollars = Double.parseDouble(input); 
      convertMe.setDollars(dollars); 
      double tl = convertMe.getTL(); 
      tlField.setText(String.format("%.2f", tl)); 
     } 
    } 

Money.java

public class MoneyDetails { 

    public double moneyAmount; 
    public double myRate; 
    public double guaranteeMyRate; 



    public double setRate (double myRate){ 


     System.out.println("myrate = " +myRate); 

     this.myRate = myRate; 
     System.out.println("this.myrate = " + this.myRate); 

     this.guaranteeMyRate = this.myRate; 

     System.out.println("garanti = " + guaranteeMyRate); 
     return this.myRate; 
    } 

    public void setTL(double turkishLira) { 
System.out.println("setTL = " + turkishLira); 
     moneyAmount = turkishLira; 
    } 

    public void setDollars(double dollars) { 
     System.out.println("setDolar = " + dollars); 

     moneyAmount = dollars; 
    } 

    public double getDollars() { 

     System.out.println("garanti getdolar = " + guaranteeMyRate); 
     return moneyAmount/guaranteeMyRate; 
    } 

    public double getTL() { 

     System.out.println("garanti getTL = " + guaranteeMyRate); 

     return moneyAmount * guaranteeMyRate; 
    } 
} 

爲什麼犯規setRate犯規影響的代碼時,我嘗試將其轉換?

+0

您確實需要包含更少的代碼。讓它更多[sscce](http://sscce.org/)。告訴我們你到底發生了什麼錯誤或者哪裏出了問題。 – MarioDS

+1

一切工作正常,重點是,我有我的主菜單上的2個子菜單​​是轉換器,另一個是SetRates。設置費率從文本字段中讀取整數並將其設置爲我的money.java上的setRate,例如我將美元的比率設置爲2,並打開我的Converter子菜單,作爲輸入,我寫了3,所以它應該做的是2/3將其轉換爲歐元,但它不能識別3當我打開轉換子菜單:/ –

+0

然後要麼它工作不正常或其他錯誤...就像我說的,是否發生錯誤?你有沒有調試代碼? – MarioDS

回答

0

它不起作用,因爲您在點擊「Rate setters」菜單時在Converter對象convertMe字段上設置了轉換率。

然後,當您單擊測試菜單時,您將創建另一個Converter實例,但您從未設置轉換率。爲您解決問題

最快和骯髒的方法是設置convertMe領域對象創建後:

 subTest.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent actionEvent){ 
       Converter convert = new Converter(); 
       convert.convertMe=Converter.this.convertMe; 
       GridLayout converterGridLayout = new GridLayout(2,2,12,6); 
       convert.setLayout(converterGridLayout); 
       convert.setVisible(true); 
      } 
     }); 

但我強烈建議重新設計的UI代碼。您的Converter類基本上基於您調用的構造函數構建兩個不同的窗口。爲每個窗口分別設置一個類,一個用於主窗口,另一個用於測試內容...

+0

這一個工作得很好,非常感謝。編輯:我會很高興地做到這一點。再次感謝。 –