我需要在我的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));
}
);
}
}
欢迎堆栈溢出!我会想象这95%的代码与你的问题无关。请创建一个[**最小**,完整且可验证的示例](http://stackoverflow.com/help/mcve),以说明您的问题。 –
它如何崩溃?请出示您的堆栈跟踪 –
异常在线程 “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