从我的Java程序中收到一些错误



我一直在尝试学习如何创建一个GUI Java程序。我一直在照着一本书学习这个过程,但尽管我照搬了这本书(据我所知),我还是遇到了一些问题。下面是我的完整代码。

package healthprofilegui;
//packages to be imported for the GUI
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

public class HealthProfileGUI extends JFrame implements ActionListener {
    // text field variables used to get user input.
    JTextField txtName = new JTextField(15);
    JTextField txtAge = new JTextField(15);
    JTextField txtWeight = new JTextField(15);
    JTextField txtHeight_feet = new JTextField(15);
    JTextField txtHeight_inches = new JTextField(15);
    //text field variables used to display calculations.
    JTextField txtBMI = new JTextField(15);
    JTextField txtCategory = new JTextField(15);
    JTextField txtMaxHeartRate = new JTextField(15);
    //buttons to be used for the program.
    JButton btnDisplay = new JButton("Display");
    JButton btnClear = new JButton("Clear");
    Integer heightTotal = null;
    private HealthProfile myProfile;
    public profileGUI()
    {
        super("HealthProfile");
        myProfile = new HealthProfile();
        setLayout(new GridLayout(0,2));
        //adds the text field labels to the program.
        add(new JLabel("txtName"));
        add(txtName);
        add(new JLabel("txtAge"));
        add(txtAge);
        add(new JLabel("txtWeight"));
        add(txtWeight);
        add(new JLabel("txtHeight_feet"));
        add(txtHeight_feet);
        add(new JLabel("txtHeight_inches"));
        add(txtHeight_inches);

        //adds the buttons to the program.
        add(btnDisplay);
        add(btnClear);
        //adds labels for the output fields
        add(new JLabel("txtBMI"));
        add(txtBMI);
        add(new JLabel("txtCategory"));
        add(txtCategory);
        add(new JLabel("txtMaxHeartRate"));
        add(txtMaxHeartRate);
        setVisible(true);
        btnDisplay.addActionListener(this);
        btnClear.addActionListener(this);
    }

    @Override
    public void action(ActionEvent e)
    {
        //clear text if the button is pressed.
        if(e.getSource() == btnClear)
        {
            System.out.println("Clear Pressed");
            txtName.setText("");
            txtAge.setText("");
            txtWeight.setText("");
            txtHeight_feet.setText("");
            txtHeight_inches.setText("");
            txtBMI.setText("");
            txtCategory.setText("");
            txtMaxHeartRate.setText("");
        }
        //process data if pressed.
        if(e.getSource() == btnDisplay)
        {
            //checks for missing input
            if (txtName.getText().isEmpty() || txtAge.getText().isEmpty() || txtWeight.getText().isEmpty() || txtHeight_feet.getText().isEmpty() || 
                    txtHeight_inches.getText().isEmpty())
            {
                JOptionPane.showMessageDialog(null, "Please provide all input.");
                return;
            }
            myProfile.setName(txtName.getText());

            try
            {
                myProfile.setAge(Integer.parseInt(txtAge.getText()));
                myProfile.setWeight(Integer.parseInt(txtWeight.getText()));
            }
            catch (NumberFormatException ex)
            {
                JOptionPane.showMessageDialog(null, "Please enter a numeric value");
                return;
            }


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

收到的第一个错误
public class HealthProfileGUI extends JFrame implements ActionListener

is HealthProfileGUI不是抽象的,不覆盖ActionListener中的抽象方法actionPerformed(ActionEvent)

我不完全确定为什么我收到这个错误。

第二个/第三个是一个方法,我试图使用,以设置布局的GUI

public profileGUI()

给了我错误

invalid method declaration; return type required

我不知道为什么这个出现在指令中从来没有使用"return"。

我也得到这个错误"调用super必须是构造函数中的第一个语句"

super("HealthProfile");

我已经尽可能多地查找了关于这个错误的信息,但没有找到任何与我的问题相似的信息。

我最后有问题的是

@Override
public void action(ActionEvent e)

方法不重写或实现超类型

中的方法

我很抱歉,有这么多,我一直按照说明,我可以假设错误会自行排序后,我完成了所有的代码。然而,情况并非如此。

我非常感谢你的帮助。

在您的第一个和第四个错误中,actionPerformed方法是您正在实现的ActionListener接口的一部分。你的方法被称为action,它不在那个接口中。

在第二个和第三个错误中,构造函数的名称必须与类的名称相同。

开始的一些注意事项:

//HealthProfile is missing  
private HealthProfile myProfile;
//the name of the constructor needs to be the same as the class name
public HealthProfileGUI() 
@Override
//you should override actionPerformed not action 
//public void action(ActionEvent e)
public void actionPerformed(ActionEvent e)

一般建议:
当你有很多错误或"大问题"时,把它分解成更小的问题。例如,减少你的代码,使你只有一个,解决它,并转移到下一个。更好的做法是一步一步地构建,确保每一步都没有错误。

相关内容

  • 没有找到相关文章

最新更新