在JAVA FX中,有一个应用程序,其中一个窗口用于创建具有保险的客户,而另一个窗口具有tableView,用于显示有关客户的信息。在tableView窗口中,我还有一个ArrayList。当我关闭注册窗口时,应用程序将客户对象发送到ArrayList。这很好用,但是当我注册另一位客户保险时,ArrayList在输入新对象之前似乎为空。总结一下,看来我的ArrayList一次只能容纳一个对象。
//In the registration controller, this code is called when I close the window and pass the customer object
FXMLDocumentController controller = loader.getController();
controller.initForsikredeKunder(passedCustomer);
//---------- In the view tableclass
private ArrayList = null;
public void initForsikredeKunder (Kunde customer) {
if(kundeListe == null) {
kundeListe = new ArrayList<Kunde>();
}
this.kundeListe.add(customer);
}
为什么ArrayList只容纳一位客户?在我看来,这段代码仅生成一个ArrayList,然后仅应添加客户 当它们传递给方法时。但是,这没有发生
答案 0 :(得分:0)
您似乎确实有错字,所以我认为private ArrayList = null确实是:
private ArrayList kundeListe = null;
代码看起来不错(我在某些上下文中猜测),尽管有些地方我会改进。它仅在“ kundeListe”为null时创建一个新列表-因此该列表不会消失。因此,如果您第二次调用initForsikredeKunder(),它要做的就是添加第二个“客户”。
基本上,您可以重复调用initForsikredeKunder(),它将正常工作。
我将initForsikredeKunder重命名为“添加”而不是init。实际上,这是一个添加操作,还可以处理后备列表的延迟初始化。
进一步,您可以执行以下操作:
private List<Kunde> kundeListe = new ArrayList<>();
并删除惰性初始化:
public void addKunder (Kunde customer) {
kundeListe.add(customer);
}
注意:我不是100%理解上面的叙述,所以我可能会误解发生了什么。如果此“对话框/窗口”仅与单个客户一起使用,则您甚至不需要使用列表!
在提供其他信息后进行编辑:
根据您的代码,看起来好像原始对话框没有被重复使用。 “新的FXMLLoader()”部分很好。
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("FXMLDocument.fxml"));
Parent tableViewParent = loader.load();
Scene tableViewScene = new Scene(tableViewParent); //Access the controller and call the method
FXMLDocumentController controller = loader.getController();
controller.initForsikredeKunder(valgtKunde); // having trouble finding what it should say instead of = new FXMLLoader();
因此,如果您的对话框需要多个客户,那么最简单的操作就是通过initForsikredKunder()调用传入多个。
这个怎么样?
public void initForsikredeKunder (Kunde... customer) {
if(kundeListe == null) {
kundeListe = new ArrayList<Kunde>();
}
for (Kunde cust : customer) {
this.kundeListe.add(cust);
}
}
然后将initForsikredeKunder()调用更改为此:
controller.initForsikredeKunder(valgtKunde1, valgtKunde2, valgtKunde3);//Add as many as you need
如果您已经有一长串“ valgtKunde”:
public void initForsikredeKunder (List<Kunde> customers) {
if(kundeListe == null) {
kundeListe = new ArrayList<Kunde>();
}
this.kundeListe.addAll(customers);
}
...并将列表传递给initForsikredeKunder(customerList);
在较大的上下文中这是一种重要的事情,不幸的是,我想在这里很难传达所有这些内容,因此可能需要根据更广泛的上下文进行一些调整。 (即,您开始使用什么数据以及对话框功能支持什么)