需要帮忙。我试图为应税收入的课堂项目创建一个组合框和一些文本字段

时间:2014-03-18 23:17:31

标签: java arrays user-interface jtextfield jcombobox

我正在为CS类创建一个税项目。我正在使用netbeans。我的项目完全正常工作,除了我总是得到的税收返回值是0.0。我是Java新手。我认为问题出在我的收入"变量。 用户输入他们的应税收入,我取用户输入的字符串并将其解析成一个整数并称之为"收入"。然后程序检查"收入"查看是否大于或小于某些值,以查看用户所在的税率范围。税率范围受用户组合框选择"填充状态"的影响。 到目前为止,我的程序只有最小的税率和单一的填充状态用于调试目的...一旦我得到这个代码工作,我应该能够相当容易地填写其余部分。 我想知道是否有人可以查看代码,看看我错过了什么。我很难将组合框与用户jtextfield条目连接起来进行计算。我不确定我的问题是在我的阵列中,在我的收入"变量,或其他地方。我花了很多时间浏览书籍和java教程。如果您能看一眼并提供帮助,那将不胜感激:)

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;

public class IncomeTax2 extends JFrame implements ItemListener
{

    private JTextField jtfIncome;
    private JTextField jtfTax;
    private JButton jbCalculate;
    private JComboBox jcb;
    private JLabel info;
    private String[] fsChoice =
    {
        "", "Single", "Married filing jointly", "Married filing separately",
        "Head of Household"
    };
    int income;
    double tax;
    private String fillingStatus;

    public static void main(String[] args)
    {
        JFrame frame = new IncomeTax2();
        frame.pack();
        frame.setTitle("Income Tax Calculator");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public IncomeTax2()
    {
        JPanel p = new JPanel();
        p.setLayout(new GridLayout(3, 2, 5, 5));
        p.setBorder(new EmptyBorder(5, 5, 5, 5));
        p.add(jcb = new JComboBox(fsChoice));
        p.add(jtfIncome = new JTextField(8));
        p.add(info = new JLabel("Pick filling status and "
                + "enter taxable income"));
        p.add(jbCalculate = new JButton("Calculate"));
        p.add(jtfTax = new JTextField(16));
        jtfTax.setEditable(false);
        setLayout(new BorderLayout());
        jtfTax.setHorizontalAlignment(JTextField.RIGHT);
        add(p, BorderLayout.CENTER);

        jtfIncome.addKeyListener(new KeyAdapter()
        {
            public void keyTyped(KeyEvent e)
            {
                char c = e.getKeyChar();
                if (!(Character.isDigit(c) || (c == KeyEvent.VK_BACK_SPACE) || 
                        c == KeyEvent.VK_DELETE || c == KeyEvent.VK_ENTER))
                {
                    Toolkit.getDefaultToolkit().beep();
                    System.out.println("User must enter a digit.");
                    e.consume();
                }
            }
        });

        jcb.addItemListener(this);

        jbCalculate.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                calculate();
            }
        });

         jtfIncome.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                String inputStr = jtfIncome.getText();
                income = Integer.parseInt(inputStr);
            }
        });
    }

    public void itemStateChanged(ItemEvent e)
    {
        if (e.getStateChange() == ItemEvent.SELECTED)
        {
            fillingStatus = (String) jcb.getSelectedItem();
            switch (fillingStatus)
            {
                case "Single":
                    if (income <= 8350)
                    {
                        tax = income * 0.10;
                        System.out.println("case[1]");
                        System.out.println("Tax = " + tax);
                    }
                    ;
                    break;
            }
        }
    }

    public void calculate()
    {
        jtfTax.setText(((int)(tax * 100) / 100.0 + ""));
    }

}

1 个答案:

答案 0 :(得分:0)

收入ActionListener的{​​{1}}依赖于用户按ENTER设置JTextField。如果没有发生那么分配

income

将生成等于tax = income * 0.10; 的值tax

确保0的作业发生在income

的开头
ItemListener

在进行税务计算之前。