Java “线程中的异常”;“主要”;IllegalArgumentException:添加容器';他是自己的父母

Java “线程中的异常”;“主要”;IllegalArgumentException:添加容器';他是自己的父母,java,swing,Java,Swing,我刚开始学习编程,正在尝试创建一个计算20%所得税的程序。程序可以编译,但不断出现错误。错误状态 线程“main”java.lang.IllegalArgumentException中的异常:将容器的父级添加到自身 我不明白该改变什么 */ import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.text.*; public class IncomeTax extends JFrame { /

我刚开始学习编程,正在尝试创建一个计算20%所得税的程序。程序可以编译,但不断出现错误。错误状态

线程“main”java.lang.IllegalArgumentException中的异常:将容器的父级添加到自身

我不明白该改变什么

*/

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

public class IncomeTax extends JFrame
{
// declarations
    Color black = new Color(0, 0, 0);
    Color white = new Color(255, 255, 255);
    Color light_gray = new Color(192, 192, 192);

    DecimalFormat currency;

    JLabel grossIncomeJLabel;
    JTextField grossIncomeJTextField;

    JLabel amountTaxedJLabel;
    JTextField amountTaxedJTextField;
    JTextField currencyJTextField;

    JLabel amountDeductedJLabel;
    JTextField amountDeductedJTextField;


    JLabel netIncomeJLabel;
    JTextField netIncomeJTextField;


    JButton enterJButton;
    JButton clearJButton;

double grossIncome;
double amountTaxed;
double amountDeducted;
double netIncome;

public IncomeTax()
    {
            createUserInterface();
    }

    public void createUserInterface()
    {
    Container contentPane = getContentPane();
    contentPane.setBackground(white);
    contentPane.setLayout(null);

    // initialize components

    // input
    grossIncomeJLabel = new JLabel ();
    grossIncomeJLabel.setBounds (50, 20, 150, 20);
    grossIncomeJLabel.setFont(new Font("Default", Font.PLAIN, 12));
    grossIncomeJLabel.setText ("Enter Gross Income:");
    grossIncomeJLabel.setForeground(black);
    grossIncomeJLabel.setHorizontalAlignment(JLabel.LEFT);
    contentPane.add(grossIncomeJLabel);

    grossIncomeJTextField = new JTextField();
    grossIncomeJTextField.setBounds(200, 20, 100, 20);
    grossIncomeJTextField.setFont(new Font("Default", Font.PLAIN, 12));
    grossIncomeJTextField.setHorizontalAlignment(JTextField.CENTER);
    grossIncomeJTextField.setForeground(black);
    grossIncomeJTextField.setBackground(white);
    grossIncomeJTextField.setEditable(true);
    contentPane.add(grossIncomeJTextField);


    //outputs
    amountTaxedJLabel = new JLabel();
    amountTaxedJLabel.setBounds(50, 50, 150, 20);
    amountTaxedJLabel.setFont(new Font("Default", Font.PLAIN, 12));
    amountTaxedJLabel.setText("Amount Taxed");
    amountTaxedJLabel.setForeground(black);
    amountTaxedJLabel.setHorizontalAlignment(JLabel.LEFT);
    amountTaxedJLabel.add(amountTaxedJLabel);

    amountTaxedJTextField = new JTextField();
    amountTaxedJTextField.setBounds(200, 50, 100, 20);
    amountTaxedJTextField.setFont(new Font("Default", Font.PLAIN, 12));
    amountTaxedJTextField.setHorizontalAlignment(JTextField.CENTER);
    amountTaxedJTextField.setForeground(black);
    amountTaxedJTextField.setBackground(white);
    amountTaxedJTextField.setEditable(false);
    contentPane.add(amountTaxedJTextField);

    amountDeductedJLabel = new JLabel();
    amountDeductedJLabel.setBounds(50, 80, 150, 20);
    amountDeductedJLabel.setFont(new Font("Default", Font.PLAIN, 12));
    amountDeductedJLabel.setText("Amount Deducted:");
    amountDeductedJLabel.setForeground(black);
    amountDeductedJLabel.setHorizontalAlignment(JLabel.LEFT);
    contentPane.add(amountDeductedJLabel);

    amountDeductedJTextField = new JTextField();
    amountDeductedJTextField.setBounds(200, 80, 100, 20);
    amountDeductedJTextField.setFont(new Font("Default", Font.PLAIN, 12));
    amountDeductedJTextField.setHorizontalAlignment(JTextField.CENTER);
    amountDeductedJTextField.setForeground(black);
    amountDeductedJTextField.setBackground(white);
    amountDeductedJTextField.setEditable(false);
    contentPane.add(amountDeductedJTextField);

    netIncomeJLabel = new JLabel();
    netIncomeJLabel.setBounds(50, 110, 150, 20);
    netIncomeJLabel.setFont(new Font("Default", Font.PLAIN, 12));
    netIncomeJLabel.setText("Net Income:");
    netIncomeJLabel.setForeground(black);
    netIncomeJLabel.setHorizontalAlignment(JLabel.LEFT);
    contentPane.add(netIncomeJLabel);

    netIncomeJTextField = new JTextField();
    netIncomeJTextField.setBounds(200, 110, 100, 20);
    netIncomeJTextField.setFont(new Font("Default", Font.PLAIN, 12));
    netIncomeJTextField.setHorizontalAlignment(JTextField.CENTER);
    netIncomeJTextField.setForeground(black);
    netIncomeJTextField.setBackground(white);
    netIncomeJTextField.setEditable(false);
    contentPane.add(netIncomeJTextField);

    // control
    enterJButton = new JButton();
    enterJButton.setBounds(50, 210, 100, 20);
    enterJButton.setFont(new Font("Default", Font.PLAIN, 12));
    enterJButton.setText("Enter");
    enterJButton.setForeground(black);
    enterJButton.setBackground(white);
    contentPane.add(enterJButton);
    enterJButton.addActionListener(

        new ActionListener()
            {
                public void actionPerformed(ActionEvent event)
                {
                    enterJButtonActionPerformed(event);
                }
            }
        );

        clearJButton = new JButton();
        clearJButton.setBounds(200, 210, 100, 20);
        clearJButton.setFont(new Font("Default", Font.PLAIN, 12));
        clearJButton.setText("Clear");
        clearJButton.setForeground(black);
        clearJButton.setBackground(white);
        contentPane.add(clearJButton);
        clearJButton.addActionListener(

            new ActionListener()
            {
                public void actionPerformed(ActionEvent event)
                {
                    clearJButtonActionPerformed(event);
                }
            }
        );

        // set properties of application’s window
        setTitle("Income Tax");         // set title
        setSize( 400, 400 );        // set window size
        setVisible(true);           // display window
        }

        // main method
        public static void main(String[] args)
        {
              IncomeTax application = new IncomeTax();
              application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            }
        public void enterJButtonActionPerformed(ActionEvent event)
    {

        // get input
        grossIncome = Double.parseDouble(grossIncomeJTextField.getText());

        // process data
        final double Tax_Rate = .20;
        amountTaxed = Tax_Rate;
        amountDeducted = grossIncome * Tax_Rate;
        netIncome = grossIncome - amountDeducted;

        //display results
        currency = new DecimalFormat("$0.00");

        amountTaxedJTextField.setText("" + currency.format(amountTaxed));
        amountDeductedJTextField.setText("" + currency.format(amountDeducted));
        netIncomeJTextField.setText("" + currency.format(netIncome));
}

    public void clearJButtonActionPerformed(ActionEvent event)
    {
        grossIncomeJTextField.setText("");
        grossIncomeJTextField.requestFocusInWindow();
        amountTaxedJTextField.setText("");
        amountDeductedJTextField.setText("");
        netIncomeJTextField.setText("");
        }

    }
这里

我想你是说

contentPane.add(amountTaxedJLabel);
在前面的示例中,您正在向自身添加视图。 在后面的示例中,您将其添加到内容窗格中。

此处

我想你是说

contentPane.add(amountTaxedJLabel);
在前面的示例中,您正在向自身添加视图。 在后面的示例中,您将其添加到内容窗格中。

此处

我想你是说

contentPane.add(amountTaxedJLabel);
在前面的示例中,您正在向自身添加视图。 在后面的示例中,您将其添加到内容窗格中。

此处

我想你是说

contentPane.add(amountTaxedJLabel);
在前面的示例中,您正在向自身添加视图。

在后面的部分中,您将其添加到内容窗格。

糟糕的标题!!!请修正我已经修正了你的问题标题。今后,请注意使您的问题标题尽可能简洁,但也尽可能提供信息。请注意,异常会确切地告诉您问题在哪一行,以及您做错了什么;一点也不神秘。你在给自己添加一些东西,不应该这样做。当你说“符合”时,你的意思是“编译”。在错误日志中,它还会告诉您发生错误的行。你能发布那个行号吗?如果你能指出是哪一行导致了异常,这也是一个很大的帮助。Stacktraces通常包括它们,如果没有这些信息,通常很难判断问题出在哪里。使用像
double
这样的浮点类型来表示货币值是一个非常糟糕的主意。您应该将它们存储为整数,或者使用Java的
BigDecimal
类。可怕的标题!!!请修正我已经修正了你的问题标题。今后,请注意使您的问题标题尽可能简洁,但也尽可能提供信息。请注意,异常会确切地告诉您问题在哪一行,以及您做错了什么;一点也不神秘。你在给自己添加一些东西,不应该这样做。当你说“符合”时,你的意思是“编译”。在错误日志中,它还会告诉您发生错误的行。你能发布那个行号吗?如果你能指出是哪一行导致了异常,这也是一个很大的帮助。Stacktraces通常包括它们,如果没有这些信息,通常很难判断问题出在哪里。使用像
double
这样的浮点类型来表示货币值是一个非常糟糕的主意。您应该将它们存储为整数,或者使用Java的
BigDecimal
类。可怕的标题!!!请修正我已经修正了你的问题标题。今后,请注意使您的问题标题尽可能简洁,但也尽可能提供信息。请注意,异常会确切地告诉您问题在哪一行,以及您做错了什么;一点也不神秘。你在给自己添加一些东西,不应该这样做。当你说“符合”时,你的意思是“编译”。在错误日志中,它还会告诉您发生错误的行。你能发布那个行号吗?如果你能指出是哪一行导致了异常,这也是一个很大的帮助。Stacktraces通常包括它们,如果没有这些信息,通常很难判断问题出在哪里。使用像
double
这样的浮点类型来表示货币值是一个非常糟糕的主意。您应该将它们存储为整数,或者使用Java的
BigDecimal
类。可怕的标题!!!请修正我已经修正了你的问题标题。今后,请注意使您的问题标题尽可能简洁,但也尽可能提供信息。请注意,异常会确切地告诉您问题在哪一行,以及您做错了什么;一点也不神秘。你在给自己添加一些东西,不应该这样做。当你说“符合”时,你的意思是“编译”。在错误日志中,它还会告诉您发生错误的行。你能发布那个行号吗?如果你能指出是哪一行导致了异常,这也是一个很大的帮助。Stacktraces通常包括它们,如果没有这些信息,通常很难判断问题出在哪里。使用像
double
这样的浮点类型来表示货币值是一个非常糟糕的主意。您应该将它们存储为整数美分,或者使用Java的
BigDecimal
类。@user4059399如果这篇文章解决了您的问题,请用绿色复选标记它为正确。这将:(1)对给出正确答案的用户表示感谢,(2)帮助有类似问题的未来用户看到这个答案解决了您的问题,(3)帮助其他志愿者不要浪费时间阅读已经有答案的问题。谢谢。@user4059399如果这篇文章解决了您的问题,请用绿色复选标记将其标记为正确。这将:(1)对给出正确答案的用户表示感谢,(2)帮助有类似问题的未来用户看到这个答案解决了您的问题,(3)帮助其他志愿者不要浪费时间阅读已经有答案的问题。谢谢。@user4059399如果这篇文章解决了您的问题,请用绿色复选标记将其标记为正确。这将:(1)对给出正确答案的用户表示感谢,(2)帮助有类似问题的未来用户看到这个答案解决了您的问题,(3)帮助其他志愿者不要浪费时间阅读已经有答案的问题。谢谢。@user4059399如果这篇文章解决了您的问题,请用绿色复选标记将其标记为正确。这将:(1)对给出正确答案的用户表示感谢,(2)用simil帮助未来的用户