Как передать объект в ArrayList в разных контроллерах (java FX) - PullRequest
0 голосов
/ 27 апреля 2019

В JAVA FX есть приложение с одним окном, которое создает клиента со страховками, и другое окно с табличным представлением, где я хочу показать информацию о клиентах. В окне tableView у меня также есть ArrayList. Когда я закрываю окно регистрации, приложение отправляет объект customer в ArrayList. Это работает нормально, но когда я регистрирую страховку другого клиента, ArrayList, кажется, пустеет, прежде чем принять новый объект. Подводя итог, кажется, что мой ArrayList будет содержать только один объект за один раз.


//In the registration controller, this code is called when I close the window and pass the customer object</p>

<pre><code>    FXMLDocumentController controller = loader.getController();
    controller.initForsikredeKunder(passedCustomer);

// ---------- В представлении tableclass private ArrayList = null;

public void initForsikredeKunder (Kunde клиент) { if (kundeListe == null) { kundeListe = новый ArrayList (); } this.kundeListe.add (заказчик); }

Почему ArrayList просто держит одного клиента? мне кажется, что этот код делает только один ArrayList, а затем просто следует добавить клиентов как они передаются в метод. Однако этого не происходит

1 Ответ

0 голосов
/ 27 апреля 2019

У вас, похоже, есть опечатка, поэтому я предполагаю, что private ArrayList = null действительно:

private ArrayList kundeListe = null;

Код выглядит хорошо (я догадываюсь о некоторых контекстах), хотя есть некоторые вещи, которые я бы улучшил. Он создает новый список только тогда, когда «kundeListe» равен нулю, поэтому список не стирается. Поэтому, если вы вызовете initForsikredeKunder () во второй раз, все, что он сделает, это добавит второго «клиента».

По сути, вы можете просто несколько раз вызывать initForsikredeKunder (), и он будет работать нормально.

Я бы переименовал initForsikredeKunder в «add» вместо 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);

Это тот тип вещей, где более широкий контекст имеет значение, но, к сожалению, мне сложно передать все это здесь, я думаю, поэтому могут потребоваться некоторые корректировки в зависимости от более широкого контекста. (т.е. с какими данными вы начинаете и что поддерживает функциональность диалога)

...