2011-12-19 64 views
1

好的,這是我最新的挑戰。我正在寫這個學校。到目前爲止,我已經能夠使GUI以我想要的方式「基本」運行,但是我在集成格式化文本字段時遇到了一些麻煩。我無法理解的是,爲什麼程序不會接受5.75的利率 - 默認爲5 - 當計算模塊在另一個程序中正常工作之前,我將其邏輯插入到我的GUI程序中。話雖如此,我張貼我的代碼,任何輸入都會有所幫助。提前致謝!在Java中格式化tempTextField。

CODE:

import java.text.DecimalFormat; 
import java.text.NumberFormat; 

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 

/* 
* MortgageCalculatorGUI.java 
* 
* Created on Dec 18, 2011, 9:01:24 PM 
*/ 
/** 
* 
* @author Roy Kosch 
*/ 
public class MortgageCalculatorGUI extends javax.swing.JFrame { 

    /** Creates new form MortgageCalculatorGUI */ 
    public MortgageCalculatorGUI() { 
     initComponents(); 
    } 

    /** This method is called from within the constructor to 
    * initialize the form. 
    * WARNING: Do NOT modify this code. The content of this method is 
    * always regenerated by the Form Editor. 
    */ 
    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code"> 
    private void initComponents() { 

     tempTextField1 = new javax.swing.JTextField(); 
     tempTextField2 = new javax.swing.JTextField(); 
     tempTextField3 = new javax.swing.JTextField(); 
     interestLabel = new javax.swing.JLabel(); 
     termLabel = new javax.swing.JLabel(); 
     loanLabel = new javax.swing.JLabel(); 
     calculateButton = new javax.swing.JButton(); 
     backButton = new javax.swing.JButton(); 
     quitButton = new javax.swing.JButton(); 
     paymentLabel = new javax.swing.JLabel(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
     setTitle("Kosch Mortgage Calculator"); 

     tempTextField1.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       tempTextField1ActionPerformed(evt); 
      } 
     }); 

     tempTextField2.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       tempTextField2ActionPerformed(evt); 
      } 
     }); 

     interestLabel.setText("Interest"); 

     termLabel.setText("Loan Term"); 

     loanLabel.setText("Loan Amount"); 

     calculateButton.setText("Calculate"); 
     calculateButton.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       calculateButtonActionPerformed(evt); 
      } 
     }); 

     backButton.setText("Go Back"); 
     backButton.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       backButtonActionPerformed(evt); 
      } 
     }); 

     quitButton.setText("QUIT"); 
     quitButton.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       quitButtonActionPerformed(evt); 
      } 
     }); 

     paymentLabel.setText("Your payment is:"); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
        .addGroup(layout.createSequentialGroup() 
         .addGap(77, 77, 77) 
         .addComponent(tempTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
         .addComponent(interestLabel)) 
        .addGroup(layout.createSequentialGroup() 
         .addGap(115, 115, 115) 
         .addComponent(quitButton)) 
        .addGroup(layout.createSequentialGroup() 
         .addGap(77, 77, 77) 
         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) 
          .addComponent(tempTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
          .addComponent(tempTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
          .addComponent(termLabel) 
          .addComponent(loanLabel))) 
        .addGroup(layout.createSequentialGroup() 
         .addGap(66, 66, 66) 
         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
          .addComponent(paymentLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 214, javax.swing.GroupLayout.PREFERRED_SIZE) 
          .addGroup(layout.createSequentialGroup() 
           .addComponent(calculateButton) 
           .addGap(18, 18, 18) 
           .addComponent(backButton))))) 
       .addContainerGap(26, Short.MAX_VALUE)) 
     ); 

     layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {backButton, calculateButton, interestLabel, loanLabel, quitButton, tempTextField1, tempTextField2, tempTextField3, termLabel}); 

     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addGap(52, 52, 52) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
        .addComponent(tempTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addComponent(interestLabel)) 
       .addGap(32, 32, 32) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
        .addComponent(tempTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addComponent(termLabel)) 
       .addGap(26, 26, 26) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
        .addComponent(tempTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addComponent(loanLabel)) 
       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
       .addComponent(paymentLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 31, Short.MAX_VALUE) 
       .addGap(18, 18, 18) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
        .addComponent(calculateButton) 
        .addComponent(backButton)) 
       .addGap(18, 18, 18) 
       .addComponent(quitButton) 
       .addGap(39, 39, 39)) 
     ); 

     layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {backButton, calculateButton, interestLabel, loanLabel, quitButton, tempTextField1, tempTextField2, tempTextField3, termLabel}); 

     pack(); 
    }// </editor-fold> 

    private void tempTextField1ActionPerformed(java.awt.event.ActionEvent evt) {            
     // TODO add your handling code here: 
    }            

    private void tempTextField2ActionPerformed(java.awt.event.ActionEvent evt) {            
     // TODO add your handling code here: 
    }            

    private void calculateButtonActionPerformed(java.awt.event.ActionEvent evt) {             
     // TODO add your handling code here: 
     { 
     NumberFormat formatter = new DecimalFormat("#0.00"); 

     double principalLoan = (int)((Double.parseDouble(tempTextField3.getText()))); 
     double loanInterest = (int)((Double.parseDouble(tempTextField1.getText()))); 
     double loanTerm = (int)((Double.parseDouble(tempTextField2.getText()))); 

     double compoundMultiplier = loanInterest/1200; 
     double termMultiplier = loanTerm*(12); 
     double exponent = -1*(termMultiplier); 

     double a = 1+compoundMultiplier; 
     double b = Math.pow(a,exponent); 
     double c = 1 - b; 
     double d = compoundMultiplier/c; 

     double mortgagePayment = d*principalLoan; 


     paymentLabel.setText("Your Payment is: $" + formatter.format(mortgagePayment)); 

     } 
    }            

    private void backButtonActionPerformed(java.awt.event.ActionEvent evt) {           
     // TODO add your handling code here: 

    }           

    private void quitButtonActionPerformed(java.awt.event.ActionEvent evt) {           
     // TODO add your handling code here: 

    }           

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String args[]) { 
     /* Set the Nimbus look and feel */ 
     //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> 
     /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. 
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */ 
     try { 
      for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
       if ("Nimbus".equals(info.getName())) { 
        javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
        break; 
       } 
      } 
     } catch (ClassNotFoundException ex) { 
      java.util.logging.Logger.getLogger(MortgageCalculatorGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (InstantiationException ex) { 
      java.util.logging.Logger.getLogger(MortgageCalculatorGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (IllegalAccessException ex) { 
      java.util.logging.Logger.getLogger(MortgageCalculatorGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
      java.util.logging.Logger.getLogger(MortgageCalculatorGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } 
     //</editor-fold> 

     /* Create and display the form */ 
     java.awt.EventQueue.invokeLater(new Runnable() { 

      public void run() { 
       new MortgageCalculatorGUI().setVisible(true); 
      } 
     }); 
    } 
    // Variables declaration - do not modify 
    private javax.swing.JButton backButton; 
    private javax.swing.JButton calculateButton; 
    private javax.swing.JLabel interestLabel; 
    private javax.swing.JLabel loanLabel; 
    private javax.swing.JLabel paymentLabel; 
    private javax.swing.JButton quitButton; 
    private javax.swing.JTextField tempTextField1; 
    private javax.swing.JTextField tempTextField2; 
    private javax.swing.JTextField tempTextField3; 
    private javax.swing.JLabel termLabel; 
    // End of variables declaration 
} 
+0

[此鏈接](http://docs.oracle.com/javase/tutorial/uiswing/components/formattedtextfield.html)可能有所幫助... – aishwarya 2011-12-19 09:02:47

+1

雖然它在技術上並不是一個程序明明錯誤,你能刪除你的類名的完整資格,並使用導入嗎?它使你的代碼更難閱讀。好的程序員編寫人類可以理解的代碼。不好的人會寫出計算機可以理解的代碼。 – Raku 2011-12-19 16:18:07

回答

1

問題:不必要的轉換爲int

解決方案:不要不必要地將它們投射到int

double principalLoan = Double.parseDouble(tempTextField3.getText()); 
    double loanInterest = Double.parseDouble(tempTextField1.getText()); 
    double loanTerm  = Double.parseDouble(tempTextField2.getText()); 
1

你施放TE解析doubleint,丟失分數:

double principalLoan = (int)((Double.parseDouble(tempTextField3.getText()))); 
double loanInterest = (int)((Double.parseDouble(tempTextField1.getText()))); 
double loanTerm = (int)((Double.parseDouble(tempTextField2.getText()))); 

只需卸下鑄造,它應該是OK:

double principalLoan = Double.parseDouble(tempTextField3.getText()); 
double loanInterest = Double.parseDouble(tempTextField1.getText()); 
double loanTerm = Double.parseDouble(tempTextField2.getText()); 
2

我在代碼中找不到formatted text field。但我發現下面的行

double loanInterest = (int) ((Double.parseDouble(tempTextField1.getText()))); 

,你投你Doubleint。也許你的意思是

double loanInterest = Double.parseDouble(tempTextField1.getText()); 
2

我建議使用JFormattedTextField而不是純JTextField,因爲派生JFormattedTextField知道NumberFormat.getNumberInstance例如

myFormattedTextField.setMinimumFractionDigits(2); 
myFormattedTextField.setMaximumFractionDigits(2); 
myFormattedTextField.setRoundingMode(RoundingMode.HALF_UP); 

而複雜的設置點點/的getValue

  • 設置是否有myFormattedTextField.setValue()

  • 對得到的是有((((Number) myFormattedTextField.getValue()).doubleValue()))

不要使用折舊Java桌面Aplications及其GroupLayout的,有時是如此難以正確地放置JComponenets集裝箱內部,使用另一種和適當LayoutManager

不添加ActionListener到JTextField,使用DocumentListener