Java 让我的GUI从一个类创建一个实例,并将该信息下拉到一个文本区域
这个项目的目标只是输入一些文本,按下一个按钮,让我的GUI在文本区域中创建一个“Dog”类的实例。但是,当我按下按钮时,它总是打印:Dog@2a4c6a7d或者其他一些看似随机的数字和字母组合。在此问题上的任何帮助都将不胜感激。谢谢 下面是正确且正常工作的代码:Java 让我的GUI从一个类创建一个实例,并将该信息下拉到一个文本区域,java,actionlistener,jtextfield,jtextarea,tostring,Java,Actionlistener,Jtextfield,Jtextarea,Tostring,这个项目的目标只是输入一些文本,按下一个按钮,让我的GUI在文本区域中创建一个“Dog”类的实例。但是,当我按下按钮时,它总是打印:Dog@2a4c6a7d或者其他一些看似随机的数字和字母组合。在此问题上的任何帮助都将不胜感激。谢谢 下面是正确且正常工作的代码: import javax.swing.*; import java.awt.*; import java.awt.event.*; class Dog { private String name; private St
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class Dog {
private String name;
private String breed;
private String age;
public Dog(String name, String breed, String age) {
this.name = name;
this.breed = breed;
this.age = age;
}
public String setDogName(String name) {
this.name = name;
return name;
}
public String setDogBreed(String breed) {
this.breed = breed;
return breed;
}
public String SetDogAge(String age) {
this.age = age;
return age;
}
public String toString() {
return ("Name: " + this.name + " Breed: " + this.breed + " Age: " + this.age);
}
}
public class LabThree extends JFrame implements ActionListener {
public LabThree() {
setLayout(new GridLayout(8, 3));
// Creates TextFields, TextAreas, and the button
name = new JTextField();
breed = new JTextField();
age = new JTextField();
JButton jbtGenerate = new JButton("Generate Dog");
echoDog = new JTextArea();
// Adds TextFields, TextAreas, and the button
add(new JLabel("Name:"));
add(name);
add(new JLabel("Breed:"));
add(breed);
add(new JLabel("Age:"));
add(age);
add(jbtGenerate);
jbtGenerate.addActionListener(this);
add(echoDog);
echoDog.setEditable(false);
}
// Top TextFields
private JTextField name;
private JTextField breed;
private JTextField age;
// Bottom(echoed) TextArea
private JTextArea echoDog;
public void actionPerformed(ActionEvent a) {
Dog dog1 = new Dog(name.getText(), breed.getText(), age.getText());
echoDog.setText(dog1.toString());
}
public static void main(String[] args) {
LabThree frame = new LabThree();
frame.setTitle("Dog Generator");
frame.setSize(500, 400);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
您需要重写Dog类中的toString()函数。大概是这样的:
public String toString()
{
return this.name + this.breed + this.age;
}
一点解释:
默认情况下,狗类继承自对象。在对象中,已经声明了一个toString(),它返回getClass().getName()+'@'+Integer.toHexString(hashCode())
。这就是你说Dog@2a4c6a7d
。它是类的名称,然后是类的哈希代码
当您向Dog类中添加上述toString()函数时,将调用新的toString()。这是面向对象编程的一个关键概念。重写Dog类中的toString方法以打印所需内容。我需要重写它来做什么?请参阅,以了解为什么会看到对象的类名和哈希代码。我尝试重写toString()方法,但我仍然得到与以前相同的结果。@Ben,你能更新你的代码吗?如果它仍然打印错误,那么它没有被正确覆盖。我相信我现在已经修复了它,并且它似乎正在工作。@override因为某种原因给了我一些问题……酷,注意你不需要@override。