2017-06-30 29 views
-1

我需要在我的taxcalculator代码上的jtextfield中替换空格逗号$%类型。但同时我需要修复它,因为当我尝试再次运行时,它不会因为验证将$添加到字段中。这是一种简单的验证形式,如果用户输入“$ 1,499. 97”,它将被转换为“1499.97”。

import javax.swing.*; 
import java.awt.*; 
import java.text.DecimalFormat; 

public class TaxCalculator7F extends JApplet { 
    JLabel subTotalJLabel, taxRateJLabel, totalTaxJLabel, totalSaleJLabel; 
    JTextField subTotalJTextField, taxRateJTextField, totalTaxJTextField, totalSaleJTextField; 
    JButton calculateTaxJButton; 

    public void init() { 
     setLayout(null); // allows explicit positioning of GUI components 

     Container myContent = getContentPane(); 

     subTotalJLabel = new JLabel(); 
     subTotalJLabel.setText("Sub Total: "); 
     subTotalJLabel.setBounds(10, 0, 100, 25); 
     myContent.add(subTotalJLabel); 

     subTotalJTextField = new JTextField(); 
     subTotalJTextField.setText("0.00"); 
     subTotalJTextField.setHorizontalAlignment(JTextField.RIGHT); 
     subTotalJTextField.setBounds(90, 0, 80, 25); 
     myContent.add(subTotalJTextField); 

     taxRateJLabel = new JLabel(); 
     taxRateJLabel.setText("Tax Rate (%): "); 
     taxRateJLabel.setBounds(10, 40, 100, 25); 
     myContent.add(taxRateJLabel); 

     taxRateJTextField = new JTextField(); 
     taxRateJTextField.setText("7"); 
     taxRateJTextField.setHorizontalAlignment(JTextField.RIGHT); 
     taxRateJTextField.setBounds(90, 40, 80, 25); 
     myContent.add(taxRateJTextField); 

     totalTaxJLabel = new JLabel(); 
     totalTaxJLabel.setText("Tax Due: "); 
     totalTaxJLabel.setBounds(10, 80, 100, 25); 
     myContent.add(totalTaxJLabel); 

     totalTaxJTextField = new JTextField(); 
     totalTaxJTextField.setEditable(false); 
     totalTaxJTextField.setHorizontalAlignment(JTextField.RIGHT); 
     totalTaxJTextField.setBounds(90, 80, 80, 25); 
     myContent.add(totalTaxJTextField); 

     totalSaleJLabel = new JLabel(); 
     totalSaleJLabel.setText("Total Sale: "); 
     totalSaleJLabel.setBounds(10, 120, 100, 25); 
     myContent.add(totalSaleJLabel); 

     totalSaleJTextField = new JTextField(); 
     totalSaleJTextField.setEditable(false); 
     totalSaleJTextField.setHorizontalAlignment(JTextField.RIGHT); 
     totalSaleJTextField.setBounds(90, 120, 80, 25); 
     myContent.add(totalSaleJTextField); 

     calculateTaxJButton = new JButton(); 
     calculateTaxJButton.setText("Calculate Tax"); 
     calculateTaxJButton.setBounds(20, 160, 140, 30); 
     myContent.add(calculateTaxJButton); 


     calculateTaxJButton.addActionListener(
        event -> { 
         // define variables 
         double subTotal, taxRate, taxDue, totalSale; 

         // get sales sub total and tax rate 
         subTotal = Double.parseDouble(subTotalJTextField.getText()); 
         //subTotalJTextField.getText(); 
         //Code to clear from field $ % , 
         //subTotalJTextField.setText(String.valueOf(subTotal).replaceAll("(?<=\\d),(?=\\d)|\\$", "")); 
         taxRate = Double.parseDouble(taxRateJTextField.getText()); 

         taxDue = subTotal * taxRate/100; 
         totalSale = subTotal + taxDue; 

         DecimalFormat dollars = new DecimalFormat("$0.00"); 
         DecimalFormat percent = new DecimalFormat("0.0%"); 

         // test strings 
         subTotalJTextField.setText(dollars.format(subTotal)); 

         taxRateJTextField.setText(percent.format(taxRate/100.00)); 

         totalTaxJTextField.setText(dollars.format(taxDue)); 
         totalSaleJTextField.setText(dollars.format(totalSale)); 
        } 
     ); 
    } 
} 
+0

欢迎堆栈溢出!我会想象这95%的代码与你的问题无关。请创建一个[**最小**,完整且可验证的示例](http://stackoverflow.com/help/mcve),以说明您的问题。 –

+0

它如何崩溃?请出示您的堆栈跟踪 –

+0

异常在线程 “AWT-EventQueue的-1” java.lang.NumberFormatException:对于输入字符串: “$ 100.00” \t在sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043) \t在阳光下。 misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110) \t在java.lang.Double.parseDouble(Double.java:538) \t在TaxCalculator7F.lambda $ INIT $ 0(TaxCalculator7F.java:72) \t在使用javax。 swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) .... – Najuto

回答

1

以及你可以replace$标志

subTotal = Double.parseDouble(subTotalJTextField.getText().replace ("$", "")); 

,税率将

taxRate = Double.parseDouble(taxRateJTextField.getText().replace ("%", "")); 

或@nandha指出

String money = "$1,234,000.67"; 
    try { 
     NumberFormat format = NumberFormat.getCurrencyInstance(); 
     Number number = format.parse(money); 
     System.out.println(number.doubleValue()); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 
+0

试过这个,仍然不让我再次运行它。只在第一次尝试时运行。 – Najuto

+0

我想你将需要做'taxRate = Double.parseDouble(taxRateJTextField.getText());'。是否有新的错误出现? –

+0

好的,我现在做了一些检查,问题是税率上的百分比。谢谢,我该如何在.replace(“$”,“”)上添加代码来替换逗号和空格呢? – Najuto

1
String subValue = subTotalJTextField.getText(); 
    try { 
     NumberFormat format = NumberFormat.getCurrencyInstance(); 
     Number number = format.parse(subValue); 
     subTotal = number.doubleValue(); 
    } catch (ParseException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     subTotal = 0; 
    } 

试试这个。 参考this更多信息

+0

谢谢。将检查此 – Najuto

+0

plus1并链接到您的答案 –

+0

@ Scary Wombat感谢您的upvote :)。现在我可以为答案投票了;) – Nandha

1

我想下面的代码以及适合于您的问题

Number amount = null, rate = null; 
try { 
    amount = NumberFormat.getCurrencyInstance().parse(subTotalJTextField.getText()); 
    rate = NumberFormat.getNumberInstance().parse(taxRateJTextField.getText()); 
} catch (Exception e) { 
    e.printStackTrace(); 
    amount = 0.0; 
    rate = 0.0; 
} 
subTotal = Double.parseDouble(String.valueOf(amount)); 
taxRate = Double.parseDouble(String.valueOf(rate));