Java 过帐到阵列列表
我希望将文本字段中输入的值传递到数组列表中,尽管我似乎无法做到这一点。我可以在使用时查看控制台中输入的详细信息Java 过帐到阵列列表,java,swing,Java,Swing,我希望将文本字段中输入的值传递到数组列表中,尽管我似乎无法做到这一点。我可以在使用时查看控制台中输入的详细信息 System.out.println(houses.get(1).getHouseNumber()) 但这并没有在我的代码中将新输入的值发布到arraylist中,我不明白为什么 ArrayList和ActionListener代码 final ArrayList<House> houses = new ArrayList<House>();
System.out.println(houses.get(1).getHouseNumber())
但这并没有在我的代码中将新输入的值发布到arraylist中,我不明白为什么
ArrayList和ActionListener代码
final ArrayList<House> houses = new ArrayList<House>();
houses.add(new House());
button.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e) {
House house = new House();
house.setHouseNumber(houseNumber.getText());
house.setStreetName(streetName.getText());
house.setTown(town.getText());
house.setPostcode(postcode.getText());
houses.add(house);
System.out.println(houses.get(1).getHouseNumber());
System.out.println(houses.get(1).getStreetName());
System.out.println(houses.get(1).getTown());
System.out.println(houses.get(1).getPostcode());
}
});
房屋类别代码
class House {
private String houseNumber;
private String streetName;
private String town;
private String postcode;
public String getHouseNumber() {
return houseNumber;
}
public void setHouseNumber(String houseNumber) {
this.houseNumber = houseNumber;
}
不需要这个变量,去掉它
JTextField HouseNumber1;
这不符合正确的java命名约定。变量名不以大写字符开头。可变名称应为:
JTextField houseNumber;
现在,在ActionListener中,您可以直接从文本字段获取文本:
house.setHouseNumber( houseNumber.getText() );
编辑:
使用它打印阵列,并显示[demo2]。House@e2eec8,演示2。House@aa9835]
House@e2eec8
和House@aa9835
分别指阵列列表中的第一和第二个房子。请尝试以下方法:
System.out.println(houses.get(0).getHouseNumber());
增编:
我无法在我的代码中查看ArrayList
中的详细信息
您可以在House
中覆盖toString()
;这样你就可以做到:
System.out.println(houses.get(0));
增编:
这不会将新输入的值发布到ArrayList
中
对,这总是得到第二个条目,从0开始。以下内容始终将最后一个发送到add()
附录:您可以像这样在房屋中循环
for (House h : houses) {
System.out.print(h.getHouseNumber());
System.out.print(h.getStreetName());
...
}
根据您的代码,您无法从JtextField
获取值Submit
是什么类型的?@Darren:建议不要将大写字母作为变量名的第一个字母。您从何处获得了houseNumber、town……以及所有这些信息?@Harry Joy:谢谢,我已将变量submit改为小写,并添加了显示houseNumber来源的附加代码。您可能希望确保与您的侦听器相关的事件确实被触发。通过了解什么是“提交”,也许我们可以推断出更多。但是这里的错误并不明显。@edalorzo:我该如何确保动作侦听器被触发?submit只是我的jbutton,它应该将细节发布到ArrayList中。感谢这一点,尽管还没有发布任何内容,但有必要在类中声明“implements actionListener”吗?当我这样做的时候,我被告知要添加抽象方法,但不应该有抽象方法,因为我有所有的AciotNLiListener组件:一般来说,您不实现ActionListener接口,因为您的类中可能有多个按钮是ActionEvents的监听器。一个常见的解决方案是为ActionListener使用一个无注释的内部类。查看编辑。除非您以其他方式将结果放在那里。您可以更新您的问题以显示您的最新代码。只要尝试了这个方法,它就工作了,门牌号会打印在控制台中,只是为了澄清一下,这是否意味着详细信息现在已传递到我的阵列中?只是我无法在我上面详细阐述的代码中看到Arraylist中的细节。你可以直接打印house.get…
,但我认为你验证它是否被添加是正确的。您还可以检查由house.add(house)
返回的结果。虽然这确实显示了上次输入的详细信息,但它们似乎仍然没有保存到数组列表中,这正是我需要它们做的,当我尝试打印数组列表以查看其所有内容时,仍然会显示[demo2]。House@12d03f9]而不是实际的细节。如果详细信息出现在我的代码行下;“final ArrayList houses=new ArrayList();”就像在代码中手动输入一样?符号House@12d03f9
是对整个房屋
实例的引用。您可能希望在数组中循环以查看它们,如上图所示。你在用什么教科书?
System.out.println(houses.get(0).getHouseNumber());
System.out.println(houses.get(0));
System.out.println(houses.get(1).getHouseNumber());
System.out.println(houses.get(houses.size() - 1).getHouseNumber());
for (House h : houses) {
System.out.print(h.getHouseNumber());
System.out.print(h.getStreetName());
...
}