编辑代码

package chapter65;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TaxCal {
    JFrame mFrame = new JFrame("个人所得税计算器");
    JPanel mainPanel = new JPanel(new GridLayout(8, 1, 5, 5));
    
    // 输入面板
    JPanel mJPanel1 = new JPanel(new FlowLayout(FlowLayout.LEFT));
    JLabel mJLabel1 = new JLabel("本月工资(元):");
    JTextField mTextField1 = new JTextField(20);
    
    JPanel mJPanel2 = new JPanel(new FlowLayout(FlowLayout.LEFT));
    JLabel mJLabel2 = new JLabel("五险一金扣除数(元):");
    JTextField mTextField2 = new JTextField(20);
    
    JPanel mJPanel3 = new JPanel(new FlowLayout(FlowLayout.LEFT));
    JLabel mJLabel3 = new JLabel("专项扣除数(元):");
    JTextField mTextField3 = new JTextField(20);
    
    JPanel mJPanel4 = new JPanel(new FlowLayout(FlowLayout.LEFT));
    JLabel mJLabel4 = new JLabel("个税起征点(元):");
    JTextField mTextField4 = new JTextField(20);
    
    // 按钮面板
    JPanel mJPanel5 = new JPanel(new FlowLayout());
    JButton mJButton1 = new JButton("计算个人所得税");
    JButton mJButton2 = new JButton("重置");
    
    // 结果面板
    JPanel mJPanel6 = new JPanel(new FlowLayout(FlowLayout.LEFT));
    JLabel mJLabel6 = new JLabel("应纳税所得额(元):");
    JTextField mTextField6 = new JTextField(20);
    
    JPanel mJPanel7 = new JPanel(new FlowLayout(FlowLayout.LEFT));
    JLabel mJLabel7 = new JLabel("应纳税金额(元):");
    JTextField mTextField7 = new JTextField(20);
    
    JPanel mJPanel8 = new JPanel(new FlowLayout(FlowLayout.LEFT));
    JLabel mJLabel8 = new JLabel("本月税后收入(元):");
    JTextField mTextField8 = new JTextField(20);

    public TaxCal() {
        // 设置组件属性
        mTextField4.setText("5000"); // 默认起征点
        mTextField6.setEditable(false);
        mTextField7.setEditable(false);
        mTextField8.setEditable(false);

        // 组装界面
        mJPanel1.add(mJLabel1);
        mJPanel1.add(mTextField1);
        
        mJPanel2.add(mJLabel2);
        mJPanel2.add(mTextField2);
        
        mJPanel3.add(mJLabel3);
        mJPanel3.add(mTextField3);
        
        mJPanel4.add(mJLabel4);
        mJPanel4.add(mTextField4);
        
        mJPanel5.add(mJButton1);
        mJPanel5.add(mJButton2);
        
        mJPanel6.add(mJLabel6);
        mJPanel6.add(mTextField6);
        
        mJPanel7.add(mJLabel7);
        mJPanel7.add(mTextField7);
        
        mJPanel8.add(mJLabel8);
        mJPanel8.add(mTextField8);

        mainPanel.add(mJPanel1);
        mainPanel.add(mJPanel2);
        mainPanel.add(mJPanel3);
        mainPanel.add(mJPanel4);
        mainPanel.add(mJPanel5);
        mainPanel.add(mJPanel6);
        mainPanel.add(mJPanel7);
        mainPanel.add(mJPanel8);

        // 事件处理
        mJButton1.addActionListener(new TaxActionListener());
        mJButton2.addActionListener(e -> {
            mTextField1.setText("");
            mTextField2.setText("");
            mTextField3.setText("");
            mTextField4.setText("5000");
            mTextField6.setText("");
            mTextField7.setText("");
            mTextField8.setText("");
        });

        mFrame.add(mainPanel);
        mFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mFrame.pack();
        mFrame.setLocationRelativeTo(null);
        mFrame.setVisible(true);
    }

    class TaxActionListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            try {
                double salary = Double.parseDouble(mTextField1.getText());
                double insurance = Double.parseDouble(mTextField2.getText());
                double specialDeduction = Double.parseDouble(mTextField3.getText());
                double threshold = Double.parseDouble(mTextField4.getText());

                // 计算应纳税所得额
                double taxableIncome = salary - insurance - specialDeduction - threshold;
                if (taxableIncome < 0) taxableIncome = 0;
                mTextField6.setText(String.format("%.2f", taxableIncome));

                // 计算应纳税额(简化税率表)
                double tax = 0;
                if (taxableIncome > 960000) {
                    tax = taxableIncome * 0.45 - 181920;
                } else if (taxableIncome > 660000) {
                    tax = taxableIncome * 0.35 - 85920;
                } else if (taxableIncome > 420000) {
                    tax = taxableIncome * 0.30 - 52920;
                } else if (taxableIncome > 300000) {
                    tax = taxableIncome * 0.25 - 31920;
                } else if (taxableIncome > 144000) {
                    tax = taxableIncome * 0.20 - 16920;
                } else if (taxableIncome > 36000) {
                    tax = taxableIncome * 0.10 - 2520;
                } else if (taxableIncome > 0) {
                    tax = taxableIncome * 0.03;
                }
                mTextField7.setText(String.format("%.2f", tax));

                // 计算税后收入
                double netIncome = salary - insurance - tax;
                mTextField8.setText(String.format("%.2f", netIncome));

            } catch (NumberFormatException ex) {
                JOptionPane.showMessageDialog(mFrame, "请输入有效的数字!", "错误", JOptionPane.ERROR_MESSAGE);
            }
        }
    }

    public static void main(String[] args) {
        new TaxCal();
    }
}