我一直在尝试学习如何创建一个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)
一般建议:
当你有很多错误或"大问题"时,把它分解成更小的问题。例如,减少你的代码,使你只有一个,解决它,并转移到下一个。更好的做法是一步一步地构建,确保每一步都没有错误。